]> git.saurik.com Git - wxWidgets.git/commitdiff
fix parsing of %p for locales which use periods in AM/PM strings (see #10677)
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 4 Apr 2009 11:53:08 +0000 (11:53 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 4 Apr 2009 11:53:08 +0000 (11:53 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60011 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/datetimefmt.cpp

index 72ed15dd826b03f75c4599e215119ed3f2c42605..8fb67972cbc08360165173e0ae9fb1f4d31efe16 100644 (file)
@@ -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;
                     }
                 }