X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/79067a961d7c6c6cd0b66e5f0d3119179497aecf..217c78b80b34f31b4341d6257e28077255d6eb93:/src/common/datetime.cpp?ds=inline diff --git a/src/common/datetime.cpp b/src/common/datetime.cpp index 73973840e1..229cd989be 100644 --- a/src/common/datetime.cpp +++ b/src/common/datetime.cpp @@ -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__) @@ -118,10 +118,12 @@ 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