X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f253c22f29771e7dfd9ae3e1fe65650da14c8092..a43a9e5521440dbb28037646ed4a07125c8823a9:/src/common/datetimefmt.cpp?ds=inline diff --git a/src/common/datetimefmt.cpp b/src/common/datetimefmt.cpp index 72ed15dd82..03a2429d0c 100644 --- a/src/common/datetimefmt.cpp +++ b/src/common/datetimefmt.cpp @@ -321,7 +321,7 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const #endif // we have to use our own implementation if the date is out of range of // strftime() or if we use non standard specificators -#ifdef HAVE_STRFTIME +#ifdef wxHAS_STRFTIME time_t time = GetTicks(); if ( (time != (time_t)-1) && !wxStrstr(format, _T("%l")) ) @@ -365,7 +365,7 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const } } //else: use generic code below -#endif // HAVE_STRFTIME +#endif // wxHAS_STRFTIME // we only parse ANSI C format specifications here, no POSIX 2 // complications, no GNU extensions but we do add support for a "%l" format @@ -442,7 +442,7 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const case _T('c'): // locale default date and time representation case _T('x'): // locale default date representation -#ifdef HAVE_STRFTIME +#ifdef wxHAS_STRFTIME // // the problem: there is no way to know what do these format // specifications correspond to for the current locale. @@ -558,11 +558,11 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const res += str; } -#else // !HAVE_STRFTIME +#else // !wxHAS_STRFTIME // Use "%m/%d/%y %H:%M:%S" format instead res += wxString::Format(wxT("%02d/%02d/%04d %02d:%02d:%02d"), tm.mon+1,tm.mday, tm.year, tm.hour, tm.min, tm.sec); -#endif // HAVE_STRFTIME/!HAVE_STRFTIME +#endif // wxHAS_STRFTIME/!wxHAS_STRFTIME break; case _T('d'): // day of a month (01-31) @@ -599,11 +599,11 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const break; case _T('p'): // AM or PM string -#ifdef HAVE_STRFTIME +#ifdef wxHAS_STRFTIME res += CallStrftime(_T("%p"), &tmTimeOnly); -#else // !HAVE_STRFTIME +#else // !wxHAS_STRFTIME res += (tmTimeOnly.tm_hour > 12) ? wxT("pm") : wxT("am"); -#endif // HAVE_STRFTIME/!HAVE_STRFTIME +#endif // wxHAS_STRFTIME/!wxHAS_STRFTIME break; case _T('S'): // second as a decimal number (00-61) @@ -626,11 +626,11 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const case _T('X'): // locale default time representation // just use strftime() to format the time for us -#ifdef HAVE_STRFTIME +#ifdef wxHAS_STRFTIME res += CallStrftime(_T("%X"), &tmTimeOnly); -#else // !HAVE_STRFTIME +#else // !wxHAS_STRFTIME res += wxString::Format(wxT("%02d:%02d:%02d"),tm.hour, tm.min, tm.sec); -#endif // HAVE_STRFTIME/!HAVE_STRFTIME +#endif // wxHAS_STRFTIME/!wxHAS_STRFTIME break; case _T('y'): // year without century (00-99) @@ -642,7 +642,7 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const break; case _T('Z'): // timezone name -#ifdef HAVE_STRFTIME +#ifdef wxHAS_STRFTIME res += CallStrftime(_T("%Z"), &tmTimeOnly); #endif break; @@ -1168,25 +1168,25 @@ wxDateTime::ParseFormat(const wxString& date, case _T('p'): // AM or PM string { - wxString am, pm, token = GetAlphaToken(input, end); + wxString am, pm; + GetAmPmStrings(&am, &pm); - // some locales have empty AM/PM tokens and thus when formatting - // dates with the %p specifier nothing is generated; when trying to - // parse them back, we get an empty token here... but that's not - // an error. - if (token.empty()) - break; + // we can never match %p in locales which don't use AM/PM + if ( am.empty() || pm.empty() ) + return false; - GetAmPmStrings(&am, &pm); - if (am.empty() && pm.empty()) - return false; // no am/pm strings defined - if ( token.CmpNoCase(pm) == 0 ) + const size_t pos = input - date.begin(); + if ( date.compare(pos, pm.length(), pm) == 0 ) { isPM = true; + input += pm.length(); } - else if ( token.CmpNoCase(am) != 0 ) + else if ( date.compare(pos, am.length(), am) == 0 ) + { + input += am.length(); + } + else // no match { - // no match return false; } } @@ -1615,7 +1615,6 @@ wxDateTime::ParseDate(const wxString& date, wxString::const_iterator *end) int year = 0; // tokenize the string - static const wxStringCharType *dateDelimiters = wxS(".,/-\t\r\n "); while ( p != pEnd ) { // skip white space and date delimiters