Download Reference Manual
The Developer's Library for D
About Wiki Forums Source Search Contact

Changeset 2128

Show
Ignore:
Timestamp:
05/02/07 16:50:42 (2 years ago)
Author:
kris
Message:

testing DST-related changes ...

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/example/system/localtime.d

    r2048 r2128  
    2222 
    2323        // set current local time 
    24         date.set (Utc.local); 
     24        date.set (Utc.time, true); 
    2525 
    2626        // get GMT difference in minutes 
     
    4343                          date.year 
    4444                         ); 
     45 
     46        date.set (Utc.time); 
     47        // format date 
     48        Stdout.formatln ("{}, {} {:d2} {:d2}:{:d2}:{:d2} GMT{}{:d2}:{:d2} {}", 
     49                          date.asDay, 
     50                          date.asMonth, 
     51                          date.day, 
     52                          date.hour,  
     53                          date.min, 
     54                          date.sec, 
     55                          sign, 
     56                          tz / 60, 
     57                          tz % 60, 
     58                          date.year 
     59                         ); 
    4560} 
  • trunk/tango/util/time/Date.d

    r2049 r2128  
    164164                ***************************************************************/ 
    165165 
    166                 Time get (
     166                Time get (bool local=false
    167167                { 
    168168                        SYSTEMTIME sTime = void; 
     
    179179 
    180180                        SystemTimeToFileTime (&sTime, &fTime); 
    181                         return Utc.convert (fTime); 
     181                        auto time = Utc.convert (fTime); 
     182                        return (local) ? cast(Time) (time+localBias) : time; 
    182183                } 
    183184 
     
    190191                ***************************************************************/ 
    191192 
    192                 void set (Time time
     193                void set (Time time, bool local=false
    193194                { 
    194195                        SYSTEMTIME sTime = void; 
     196 
     197                        if (local) 
     198                            time -= localBias; 
    195199 
    196200                        auto fTime = Utc.convert (time); 
     
    206210                        dow = sTime.wDayOfWeek; 
    207211                } 
     212 
     213                /*************************************************************** 
     214 
     215                        adjust for local time 
     216 
     217                ***************************************************************/ 
     218 
     219                private ulong localBias () 
     220                { 
     221                        ulong bias; 
     222                        TIME_ZONE_INFORMATION tz = void; 
     223 
     224                        switch (GetTimeZoneInformation (&tz)) 
     225                               { 
     226                               default: 
     227                                    bias = tz.Bias; 
     228                                    break; 
     229                               case 1: 
     230                                    bias = tz.Bias + tz.StandardBias; 
     231                                    break; 
     232                               case 2: 
     233                                    bias = tz.Bias + tz.DaylightBias; 
     234                                    break; 
     235                               } 
     236 
     237                        return bias * Time.TicksPerMinute; 
     238                } 
    208239        } 
    209240 
     
    223254                ***************************************************************/ 
    224255 
    225                 Time get (
     256                Time get (bool local=false
    226257                { 
    227258                        tm t; 
     
    234265                        t.tm_sec = sec; 
    235266 
     267                        time_t seconds = local ? timelocal (&t)  
     268                                               : timegm (&t); 
    236269                        return cast(Time) (Time.TicksTo1970 + 
    237                                            Time.TicksPerSecond * timegm(&t)
     270                                           Time.TicksPerSecond * seconds
    238271                                           Time.TicksPerMillisecond * ms); 
    239272                } 
     
    247280                **************************************************************/ 
    248281 
    249                 void set (Time time
     282                void set (Time time, bool local=false
    250283                { 
    251284                        auto timeval = Utc.convert (time); 
     
    253286 
    254287                        tm result; 
    255                         tm* t = gmtime_r (&timeval.tv_sec, &result); 
    256                         assert (t, "gmtime failed"); 
     288                        tm* t = local ? localtime_r (&timeval.tv_sec, &result)  
     289                                      : gmtime_r (&timeval.tv_sec, &result); 
     290                        assert (t); 
    257291         
    258                         year = t.tm_year + 1900; 
    259                         month = t.tm_mon + 1; 
    260                         day = t.tm_mday; 
    261                         hour = t.tm_hour; 
    262                         min = t.tm_min; 
    263                         sec = t.tm_sec; 
    264                         dow = t.tm_wday; 
     292                        year = result.tm_year + 1900; 
     293                        month = result.tm_mon + 1; 
     294                        day = result.tm_mday; 
     295                        hour = result.tm_hour; 
     296                        min = result.tm_min; 
     297                        sec = result.tm_sec; 
     298                        dow = result.tm_wday; 
    265299                } 
    266300        }