Bug 5141 – DaylightSavingTA() is returning incorrect data

Status
RESOLVED
Resolution
INVALID
Severity
normal
Priority
P2
Component
phobos
Product
D
Version
D1 (retired)
Platform
All
OS
Windows
Creation time
2010-10-31T05:03:00Z
Last change time
2010-10-31T05:15:39Z
Assigned to
nobody
Creator
koine4895

Comments

Comment #0 by koine4895 — 2010-10-31T05:03:33Z
DaylightSavingTA() is using the Windows API GetTimeZoneInformation() call, and is assuming that the StandardDate and DaylightDate members of the TIME_ZONE_INFORMATION structure are normal SYSTEMTIME values, but they are not. From date.d: ts = SYSTEMTIME2d_time(&tzi.StandardDate, dt); td = SYSTEMTIME2d_time(&tzi.DaylightDate, dt); if (td <= dt && dt < ts) { t = -tzi.DaylightBias * (60 * TicksPerSecond); //printf("DST is in effect, %d\n", t); } From MSDN: DaylightDate Specifies a SYSTEMTIME structure that contains a date and local time when the transition from standard time to daylight saving time occurs on this operating system. If this date is not specified, the wMonth member in the SYSTEMTIME structure must be zero. If this date is specified, the StandardDate value in the TIME_ZONE_INFORMATION structure must also be specified. To select the correct day in the month, set the wYear member to zero, the wDayOfWeek member to an appropriate weekday, and the wDay member to a value in the range 1 through 5. Using this notation, the first Sunday in April can be specified, as can the last Thursday in October (5 is equal to "the last").
Comment #1 by koine4895 — 2010-10-31T05:15:39Z
Sorry .. noticed that it was checking for wYear 0 in SYSTEMTIME2d_time() .. back to the drawing board to figure out why I'm getting the wrong hour ...