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>
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))
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
}