Catch invalid offset returns from QTimeZone backends
If the backends run into an error in computing the offset, they return INT_MIN; but they are valled via the front-end, which returns zero when the zone is invalid. So treat INT_MIN returns from the backend the same as the case of being invalid. Change-Id: Ic3c4dfe964dbfba4030c770213eca8a63e84736d Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
455994c2ee
commit
c3aa4cf952
@ -607,9 +607,11 @@ QString QTimeZone::abbreviation(const QDateTime &atDateTime) const
|
|||||||
|
|
||||||
int QTimeZone::offsetFromUtc(const QDateTime &atDateTime) const
|
int QTimeZone::offsetFromUtc(const QDateTime &atDateTime) const
|
||||||
{
|
{
|
||||||
if (isValid())
|
if (isValid()) {
|
||||||
return d->offsetFromUtc(atDateTime.toMSecsSinceEpoch());
|
const int offset = d->offsetFromUtc(atDateTime.toMSecsSinceEpoch());
|
||||||
|
if (offset != QTimeZonePrivate::invalidSeconds())
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -627,9 +629,11 @@ int QTimeZone::offsetFromUtc(const QDateTime &atDateTime) const
|
|||||||
|
|
||||||
int QTimeZone::standardTimeOffset(const QDateTime &atDateTime) const
|
int QTimeZone::standardTimeOffset(const QDateTime &atDateTime) const
|
||||||
{
|
{
|
||||||
if (isValid())
|
if (isValid()) {
|
||||||
return d->standardTimeOffset(atDateTime.toMSecsSinceEpoch());
|
const int offset = d->standardTimeOffset(atDateTime.toMSecsSinceEpoch());
|
||||||
|
if (offset != QTimeZonePrivate::invalidSeconds())
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -647,9 +651,11 @@ int QTimeZone::standardTimeOffset(const QDateTime &atDateTime) const
|
|||||||
|
|
||||||
int QTimeZone::daylightTimeOffset(const QDateTime &atDateTime) const
|
int QTimeZone::daylightTimeOffset(const QDateTime &atDateTime) const
|
||||||
{
|
{
|
||||||
if (hasDaylightTime())
|
if (hasDaylightTime()) {
|
||||||
return d->daylightTimeOffset(atDateTime.toMSecsSinceEpoch());
|
const int offset = d->daylightTimeOffset(atDateTime.toMSecsSinceEpoch());
|
||||||
|
if (offset != QTimeZonePrivate::invalidSeconds())
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -224,7 +224,10 @@ QString QTimeZonePrivate::abbreviation(qint64 atMSecsSinceEpoch) const
|
|||||||
|
|
||||||
int QTimeZonePrivate::offsetFromUtc(qint64 atMSecsSinceEpoch) const
|
int QTimeZonePrivate::offsetFromUtc(qint64 atMSecsSinceEpoch) const
|
||||||
{
|
{
|
||||||
return standardTimeOffset(atMSecsSinceEpoch) + daylightTimeOffset(atMSecsSinceEpoch);
|
const int std = standardTimeOffset(atMSecsSinceEpoch);
|
||||||
|
const int dst = daylightTimeOffset(atMSecsSinceEpoch);
|
||||||
|
const int bad = invalidSeconds();
|
||||||
|
return std == bad || dst == bad ? bad : std + dst;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QTimeZonePrivate::standardTimeOffset(qint64 atMSecsSinceEpoch) const
|
int QTimeZonePrivate::standardTimeOffset(qint64 atMSecsSinceEpoch) const
|
||||||
|
@ -996,10 +996,10 @@ void tst_QTimeZone::malformed()
|
|||||||
const QDateTime now = QDateTime::currentDateTime();
|
const QDateTime now = QDateTime::currentDateTime();
|
||||||
QTimeZone barf("QUT4tCZ0 , /");
|
QTimeZone barf("QUT4tCZ0 , /");
|
||||||
if (barf.isValid())
|
if (barf.isValid())
|
||||||
barf.offsetFromUtc(now);
|
QCOMPARE(barf.offsetFromUtc(now), 0);
|
||||||
barf = QTimeZone("QtC+09,,MA");
|
barf = QTimeZone("QtC+09,,MA");
|
||||||
if (barf.isValid())
|
if (barf.isValid())
|
||||||
barf.offsetFromUtc(now);
|
QCOMPARE(barf.offsetFromUtc(now), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QTimeZone::utcTest()
|
void tst_QTimeZone::utcTest()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user