diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-06-27 14:04:08 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-06-27 18:16:43 +0200 |
commit | 73649e80c03872851f3b5ad96e061d1b347612b5 (patch) | |
tree | 2de08d79608bb090ac9378d21e09c3ba614858dc /src/qml/qml/v4 | |
parent | 36d45a1585d3ed67f28d23d3f619aca1fe61a013 (diff) |
Fix daylight savings code on Windows altogether
Reverted the previous change, the local timezone adjustment should not include
the daylight savings, because in a long running program that runs across the
DST boundary, the timezone doesn't change, but the DST adjustment does. That
is why LocalTZA is always used in conjunction with a call to DaylightSavingTA,
which unfortunately had a silly bug on Windows:
It was assumed that _localtime64_s returns zero on failure, similar to
localtime_r on Unix. However it is exactly the opposite, zero is returned
on success and an error code is returned on failure.
Change-Id: Ib324f09f290870630b66793882c5b121de445f05
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/qml/v4')
-rw-r--r-- | src/qml/qml/v4/qv4dateobject.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/src/qml/qml/v4/qv4dateobject.cpp b/src/qml/qml/v4/qv4dateobject.cpp index b40820a7a0..3cf6cb1aeb 100644 --- a/src/qml/qml/v4/qv4dateobject.cpp +++ b/src/qml/qml/v4/qv4dateobject.cpp @@ -299,7 +299,8 @@ static inline double DaylightSavingTA(double t) struct tm tmtm; #if defined(_MSC_VER) && _MSC_VER >= 1400 __time64_t tt = (__time64_t)(t / msPerSecond); - if (!_localtime64_s(&tmtm, &tt)) + // _localtime_64_s returns non-zero on failure + if (_localtime64_s(&tmtm, &tt) != 0) #else long int tt = (long int)(t / msPerSecond); if (!localtime_r((const time_t*) &tt, &tmtm)) @@ -634,10 +635,8 @@ static double getLocalTZA() return double(locl - globl) * 1000.0; #else TIME_ZONE_INFORMATION tzInfo; - LONG daylightBias = 0; - if (GetTimeZoneInformation(&tzInfo) == TIME_ZONE_ID_DAYLIGHT) - daylightBias = tzInfo.DaylightBias; - return -(tzInfo.Bias + daylightBias)* 60.0 * 1000.0; + GetTimeZoneInformation(&tzInfo); + return -tzInfo.Bias * 60.0 * 1000.0; #endif } |