mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-14 10:37:41 -04:00
Fix KI daylight saving time calculation.
The previous implementation had the following bugs: - DST was truncated to end of October - DST start was off by one week in years where March 1st is a Monday - DST start was off by one second (1:59:59 -> 2:00:00 -> 3:00:01 instead of the correct 1:59:59 -> 3:00:00 -> 3:00:01) Tested against tzdata 2009g.
This commit is contained in:
@ -648,11 +648,11 @@ time_t cyMisc::ConvertGMTtoDni(time_t gtime)
|
||||
plUnifiedTime utime = plUnifiedTime();
|
||||
utime.SetSecs(dtime);
|
||||
// check for daylight savings time in New Mexico and adjust
|
||||
if ( utime.GetMonth() >= 3 && utime.GetMonth() < 11 )
|
||||
if ( utime.GetMonth() >= 3 && utime.GetMonth() <= 11 )
|
||||
{
|
||||
plUnifiedTime dstStart = plUnifiedTime();
|
||||
dstStart.SetGMTime(utime.GetYear(),3,7,2,0,0);
|
||||
// find first Sunday after 3/7 (second Sunday of March)
|
||||
dstStart.SetGMTime(utime.GetYear(),3,8,2,0,0);
|
||||
// find first Sunday after (including) 3/8 (second Sunday of March)
|
||||
int days_to_go = 7 - dstStart.GetDayOfWeek();
|
||||
if (days_to_go == 7)
|
||||
days_to_go = 0;
|
||||
@ -660,13 +660,13 @@ time_t cyMisc::ConvertGMTtoDni(time_t gtime)
|
||||
|
||||
plUnifiedTime dstEnd = plUnifiedTime();
|
||||
dstEnd.SetGMTime(utime.GetYear(),11,1,1,0,0);
|
||||
// find first sunday after 11/1 (first Sunday of November)
|
||||
// find first sunday after (including) 11/1 (first Sunday of November)
|
||||
days_to_go = 7 - dstEnd.GetDayOfWeek();
|
||||
if (days_to_go == 7)
|
||||
days_to_go = 0;
|
||||
time_t dstEndSecs = dstEnd.GetSecs() + days_to_go * kOneDay;
|
||||
|
||||
if ( dtime > dstStartSecs && dtime < dstEndSecs )
|
||||
if ( dtime >= dstStartSecs && dtime < dstEndSecs )
|
||||
// add hour for daylight savings time
|
||||
dtime += kOneHour;
|
||||
}
|
||||
|
Reference in New Issue
Block a user