X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1e6feb95a79834836e88143b15d9f424ebe79621..d7a7bd6d27cf2d3bb23c5ceeccbcbe74cf83b4ec:/src/common/datetime.cpp diff --git a/src/common/datetime.cpp b/src/common/datetime.cpp index ab397e793c..229cd989be 100644 --- a/src/common/datetime.cpp +++ b/src/common/datetime.cpp @@ -67,10 +67,10 @@ #ifndef WX_PRECOMP #include "wx/string.h" - #include "wx/intl.h" #include "wx/log.h" #endif // WX_PRECOMP +#include "wx/intl.h" #include "wx/thread.h" #include "wx/tokenzr.h" #include "wx/module.h" @@ -97,16 +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() + { + 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 @@ -196,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; @@ -249,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