X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5283098e1316b4a811fbccaabbda71f676e86c93..1eb1eae717bea7942825313db9074529927db482:/src/common/datetime.cpp diff --git a/src/common/datetime.cpp b/src/common/datetime.cpp index 5d04db2a3e..d796e6e127 100644 --- a/src/common/datetime.cpp +++ b/src/common/datetime.cpp @@ -13,7 +13,7 @@ // so long as the above copyright and this permission statement // are retained in all copies. // -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// /* @@ -97,6 +97,10 @@ #undef HAVE_STRPTIME #endif // broken strptime() +#if defined(__MWERKS__) && wxUSE_UNICODE + #include +#endif + #if !defined(WX_TIMEZONE) && !defined(WX_GMTOFF_IN_TM) #if defined(__BORLANDC__) || defined(__MINGW32__) || defined(__VISAGECPP__) #define WX_TIMEZONE _timezone @@ -258,7 +262,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 +271,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 } @@ -3231,7 +3241,7 @@ const wxChar *wxDateTime::ParseDate(const wxChar *date) // tokenize the string size_t nPosCur = 0; - static const wxChar *dateDelimiters = _T(".,/-\t\n "); + static const wxChar *dateDelimiters = _T(".,/-\t\r\n "); wxStringTokenizer tok(p, dateDelimiters); while ( tok.HasMoreTokens() ) {