QDateTime: Fix sign handling in the timezone offset parser

Previously, parsing negative timezone offsets with minutes != 00
produced wrong results.

Examples (in -> out)
-00:15 -> +00:15
-01:15 -> -00:45

Change-Id: I6fa30810a08bdf2996365661720b2e362e8aeb93
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: John Layt <jlayt@kde.org>
This commit is contained in:
Daniel Seither 2014-02-04 12:36:27 +01:00 committed by The Qt Project
parent d69c6bc81f
commit baf5eed1ef

View File

@ -265,17 +265,24 @@ static int fromOffsetString(const QString &offsetString, bool *valid)
if (size < 2 || size > 6)
return 0;
// sign will be +1 for a positive and -1 for a negative offset
int sign;
// First char must be + or -
const QChar sign = offsetString.at(0);
if (sign != QLatin1Char('+') && sign != QLatin1Char('-'))
const QChar signChar = offsetString.at(0);
if (signChar == QLatin1Char('+'))
sign = 1;
else if (signChar == QLatin1Char('-'))
sign = -1;
else
return 0;
// Split the hour and minute parts
QStringList parts = offsetString.split(QLatin1Char(':'));
QStringList parts = offsetString.mid(1).split(QLatin1Char(':'));
if (parts.count() == 1) {
// [+-]HHMM format
parts.append(parts.at(0).mid(3));
parts[0] = parts.at(0).left(3);
parts.append(parts.at(0).mid(2));
parts[0] = parts.at(0).left(2);
}
bool ok = false;
@ -288,7 +295,7 @@ static int fromOffsetString(const QString &offsetString, bool *valid)
return 0;
*valid = true;
return ((hour * 60) + minute) * 60;
return sign * ((hour * 60) + minute) * 60;
}
/*****************************************************************************