From 79c4aa385fe8b959e64616a53c6cb56df68f1cb5 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 4 Apr 2009 11:53:08 +0000 Subject: [PATCH] fix parsing of %p for locales which use periods in AM/PM strings (see #10677) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60011 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/datetimefmt.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/common/datetimefmt.cpp b/src/common/datetimefmt.cpp index 72ed15dd82..8fb67972cb 100644 --- a/src/common/datetimefmt.cpp +++ b/src/common/datetimefmt.cpp @@ -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; } } -- 2.45.2