]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/datetime.cpp
Fix for GetValue
[wxWidgets.git] / src / common / datetime.cpp
index 73973840e1969384527f1833bf5db1bcf0bdea31..229cd989bedd4a687b49d51650f003657dfc4666 100644 (file)
@@ -97,7 +97,7 @@
     #undef HAVE_STRPTIME
 #endif // broken strptime()
 
-#ifndef WX_TIMEZONE
+#if !defined(WX_TIMEZONE) && !defined(WX_GMTOFF_IN_TM)
     #if defined(__BORLANDC__) || defined(__MINGW32__) || defined(__VISAGECPP__)
         #define WX_TIMEZONE _timezone
     #elif defined(__MWERKS__)
             return timezone;
         }
         #define WX_TIMEZONE wxGetTimeZone()
+    #elif defined(__DARWIN__)
+        #define WX_GMTOFF_IN_TM
     #else // unknown platform - try timezone
         #define WX_TIMEZONE timezone
     #endif
-#endif // !WX_TIMEZONE
+#endif // !WX_TIMEZONE && !WX_GMTOFF_IN_TM
 
 // ----------------------------------------------------------------------------
 // macros
@@ -261,20 +263,31 @@ static int GetTimeZone()
 {
     // set to TRUE when the timezone is set
     static bool s_timezoneSet = FALSE;
-
+#ifdef WX_GMTOFF_IN_TM
+    static long gmtoffset = LONG_MAX; // invalid timezone
+#endif
+    
     wxCRIT_SECT_LOCKER(lock, gs_critsectTimezone);
 
     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;
 
-        (void)localtime(&t);
+        tm = localtime(&t);
         s_timezoneSet = TRUE;
+#ifdef WX_GMTOFF_IN_TM
+        gmtoffset = tm->tm_gmtoff;
+#endif
     }
 
+#ifdef WX_GMTOFF_IN_TM
+    return (int)gmtoffset;
+#else
     return (int)WX_TIMEZONE;
+#endif
 }
 
 // return the integral part of the JDN for the midnight of the given date (to
@@ -440,11 +453,7 @@ static bool GetNumericToken(size_t len, const wxChar*& p, unsigned long *number)
             break;
     }
 
-    // use the base 10 explicitly because otherwise the string "09" (the
-    // leading zeroes are common in the date specifications) is not parsed
-    // correctly as, according to the standard C rules, it is understood as an
-    // octal number and '9' is not a valid octal digit!
-    return !s.empty() && s.ToULong(number, 10);
+    return !!s && s.ToULong(number);
 }
 
 // scans all alphabetic characters and returns the resulting string
@@ -3106,7 +3115,7 @@ const wxChar *wxDateTime::ParseDate(const wxChar *date)
 
         // is it a number?
         unsigned long val;
-        if ( token.ToULong(&val, 10) ) // 10: see comment in GetNumericToken()
+        if ( token.ToULong(&val)
         {
             // guess what this number is