X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fde5a86bdac3b4286b48620ec5c1ee9be01b4549..4a28b9b81cafbf10b32dacbdc4fe98944e3ff6c6:/src/common/datetime.cpp diff --git a/src/common/datetime.cpp b/src/common/datetime.cpp index 418a72f51c..1f3ba66047 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 @@ -1888,6 +1901,10 @@ wxString wxDateTime::Format(const wxChar *format, const TimeZone& tz) const fmt = _T("%03d"); break; + case _T('w'): // week day as number has only one + fmt = _T("%d"); + break; + default: // it's either another valid format specifier in which case // the format is "%02d" (for all the rest) or we have the @@ -2531,6 +2548,30 @@ const wxChar *wxDateTime::ParseFormat(const wxChar *date, width += *fmt - _T('0'); } + // the default widths for the various fields + if ( !width ) + { + switch ( *fmt ) + { + case _T('Y'): // year has 4 digits + width = 4; + break; + + case _T('j'): // day of year has 3 digits + case _T('l'): // milliseconds have 3 digits + width = 3; + break; + + case _T('w'): // week day as number has only one + width = 1; + break; + + default: + // default for all other fields + width = 2; + } + } + // then the format itself switch ( *fmt ) {