]> git.saurik.com Git - wxWidgets.git/commitdiff
fix bug with timezone calculations when WX_GMTOFF_IN_TM si true
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 27 Feb 2003 12:53:03 +0000 (12:53 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 27 Feb 2003 12:53:03 +0000 (12:53 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19364 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/datetime.cpp

index 5d04db2a3e05ebc54901da87d71d4c454226cdda..71c1c95a8f9986de0445934055ddfc766980b116 100644 (file)
@@ -258,7 +258,8 @@ wxDateTime::wxDateTime_t GetNumOfDaysInMonth(int year, wxDateTime::Month month)
     return daysInMonth[wxDateTime::IsLeapYear(year)][month];
 }
 
-// ensure that the timezone variable is set by calling localtime
+// returns the time zone in the C sense, i.e. the difference UTC - local
+// (in seconds)
 static int GetTimeZone()
 {
     // set to TRUE when the timezone is set
@@ -266,20 +267,25 @@ static int GetTimeZone()
 #ifdef WX_GMTOFF_IN_TM
     static long gmtoffset = LONG_MAX; // invalid timezone
 #endif
-    
+
     wxCRIT_SECT_LOCKER(lock, gs_critsectTimezone);
 
+    // ensure that the timezone variable is set by calling localtime
     if ( !s_timezoneSet )
     {
         // just call localtime() instead of figuring out whether this system
         // supports tzset(), _tzset() or something else
-        time_t     t = 0;
+        time_t t = 0;
         struct tm *tm;
 
         tm = localtime(&t);
         s_timezoneSet = TRUE;
+
 #ifdef WX_GMTOFF_IN_TM
-        gmtoffset = tm->tm_gmtoff;
+        // note that GMT offset is the opposite of time zone and so to return
+        // consistent results in both WX_GMTOFF_IN_TM and !WX_GMTOFF_IN_TM
+        // cases we have to negate it
+        gmtoffset = -tm->tm_gmtoff;
 #endif
     }