X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/713a0efc617935b1da6151d98ff111e3bde52c3d..12447831a8ebc506f730cafac6f6ef13f243b7d2:/src/common/datetime.cpp diff --git a/src/common/datetime.cpp b/src/common/datetime.cpp index 23080fef24..229cd989be 100644 --- a/src/common/datetime.cpp +++ b/src/common/datetime.cpp @@ -97,25 +97,33 @@ #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__) long wxmw_timezone = 28800; - #define WX_TIMEZONE wxmw_timezone; + #define WX_TIMEZONE wxmw_timezone #elif defined(__DJGPP__) #include + #include static long wxGetTimeZone() { - struct timeb tb; - ftime(&tb); - return tb.timezone; + static long timezone = MAXLONG; // invalid timezone + if (timezone == MAXLONG) + { + struct timeb tb; + ftime(&tb); + timezone = tb.timezone; + } + 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 @@ -205,10 +213,7 @@ static const wxDateTime::wxDateTime_t gs_cumulatedDays[2][MONTHS_IN_YEAR] = // in the fine tradition of ANSI C we use our equivalent of (time_t)-1 to // indicate an invalid wxDateTime object - -static const wxDateTime gs_dtDefault; - -const wxDateTime& wxDefaultDateTime = gs_dtDefault; +const wxDateTime wxDefaultDateTime; wxDateTime::Country wxDateTime::ms_country = wxDateTime::Country_Unknown; @@ -258,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