D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 5141 - DaylightSavingTA() is returning incorrect data
Summary: DaylightSavingTA() is returning incorrect data
Status: RESOLVED INVALID
Alias: None
Product: D
Classification: Unclassified
Component: phobos (show other issues)
Version: D1 (retired)
Hardware: All Windows
: P2 normal
Assignee: No Owner
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-10-31 05:03 UTC by Robert
Modified: 2010-10-31 05:15 UTC (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description Robert 2010-10-31 05:03:33 UTC
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 Robert 2010-10-31 05:15:39 UTC
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 ...