Browse Source

Merged in dst (http://foundry.openuru.org/fisheye/cru/CWE-8)

DST Fix

Original implementation by Adam Johnson, with some bug fixes by Christian Walther.

Includes a fix for plUnifiedTime::SetGMTime not working correctly when the given time falls into local DST.
avatar-spawn
Christian Walther 13 years ago
parent
commit
b0cbd18f2c
  1. 12
      MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp
  2. 4
      MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plUnifiedTime/plUnifiedTime.cpp
  3. 2
      MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plUnifiedTime/plUnifiedTime.h

12
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp

@ -649,25 +649,25 @@ UInt32 cyMisc::ConvertGMTtoDni(UInt32 gtime)
plUnifiedTime utime = plUnifiedTime(); plUnifiedTime utime = plUnifiedTime();
utime.SetSecs(dtime); utime.SetSecs(dtime);
// check for daylight savings time in New Mexico and adjust // check for daylight savings time in New Mexico and adjust
if ( utime.GetMonth() >= 4 && utime.GetMonth() < 11 ) if ( utime.GetMonth() >= 3 && utime.GetMonth() <= 11 )
{ {
plUnifiedTime dstStart = plUnifiedTime(); plUnifiedTime dstStart = plUnifiedTime();
dstStart.SetGMTime(utime.GetYear(),4,1,2,0,0); dstStart.SetGMTime(utime.GetYear(),3,8,2,0,0);
// find first Sunday after 4/1 (first sunday of April) // find first Sunday after (including) 3/8 (second Sunday of March)
UInt32 days_to_go = 7 - dstStart.GetDayOfWeek(); UInt32 days_to_go = 7 - dstStart.GetDayOfWeek();
if (days_to_go == 7) if (days_to_go == 7)
days_to_go = 0; days_to_go = 0;
UInt32 dstStartSecs = dstStart.GetSecs() + days_to_go * kOneDay; UInt32 dstStartSecs = dstStart.GetSecs() + days_to_go * kOneDay;
plUnifiedTime dstEnd = plUnifiedTime(); plUnifiedTime dstEnd = plUnifiedTime();
dstEnd.SetGMTime(utime.GetYear(),10,25,1,0,0); dstEnd.SetGMTime(utime.GetYear(),11,1,1,0,0);
// find first sunday after 10/25 (last sunday of Oct.) // find first sunday after (including) 11/1 (first Sunday of November)
days_to_go = 7 - dstEnd.GetDayOfWeek(); days_to_go = 7 - dstEnd.GetDayOfWeek();
if (days_to_go == 7) if (days_to_go == 7)
days_to_go = 0; days_to_go = 0;
UInt32 dstEndSecs = dstEnd.GetSecs() + days_to_go * kOneDay; UInt32 dstEndSecs = dstEnd.GetSecs() + days_to_go * kOneDay;
if ( dtime > dstStartSecs && dtime < dstEndSecs ) if ( dtime >= dstStartSecs && dtime < dstEndSecs )
// add hour for daylight savings time // add hour for daylight savings time
dtime += kOneHour; dtime += kOneHour;
} }

4
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plUnifiedTime/plUnifiedTime.cpp

@ -263,9 +263,9 @@ void plUnifiedTime::ToCurrentTime()
SetToUTC(); SetToUTC();
} }
hsBool plUnifiedTime::SetGMTime(short year, short month, short day, short hour, short minute, short second, unsigned long usec, int dst) hsBool plUnifiedTime::SetGMTime(short year, short month, short day, short hour, short minute, short second, unsigned long usec)
{ {
if( !SetTime( year, month, day, hour, minute, second, usec, dst ) ) if( !SetTime( year, month, day, hour, minute, second, usec, 0 ) )
return false; return false;
fSecs -= IGetLocalTimeZoneOffset(); fSecs -= IGetLocalTimeZoneOffset();

2
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plUnifiedTime/plUnifiedTime.h

@ -129,7 +129,7 @@ public:
void SetSecsDouble(double secs); void SetSecsDouble(double secs);
void SetMicros(const UInt32 micros) { fMicros = micros; } void SetMicros(const UInt32 micros) { fMicros = micros; }
hsBool SetTime(short year, short month, short day, short hour, short minute, short second, unsigned long usec=0, int dst=-1); hsBool SetTime(short year, short month, short day, short hour, short minute, short second, unsigned long usec=0, int dst=-1);
hsBool SetGMTime(short year, short month, short day, short hour, short minute, short second, unsigned long usec=0, int dst=-1); hsBool SetGMTime(short year, short month, short day, short hour, short minute, short second, unsigned long usec=0);
hsBool SetToUTC(); hsBool SetToUTC();
void ToCurrentTime(); void ToCurrentTime();
void ToEpoch() { fSecs = 0; fMicros = 0;} void ToEpoch() { fSecs = 0; fMicros = 0;}

Loading…
Cancel
Save