]> git.saurik.com Git - wxWidgets.git/commitdiff
Restore ability to parse hours only with wxDateTime::ParseTime().
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 15 May 2013 13:05:49 +0000 (13:05 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 15 May 2013 13:05:49 +0000 (13:05 +0000)
This was accidentally removed in r51059, but worked in 2.8 and so should
continue to work.

Also add a unit test to ensure that this doesn't get broken again in the
future.

Closes #15204.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73988 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/datetimefmt.cpp
tests/datetime/datetimetest.cpp

index fda6c0ad52925ba98a1b0ef2264c3a0cbe8b1f53..0868f626aa24237d0bd16dc00c8dc2b431d68a60 100644 (file)
@@ -2105,6 +2105,8 @@ wxDateTime::ParseTime(const wxString& time, wxString::const_iterator *end)
         "%H:%M:%S",     // could be the same or 24 hour one so try it too
         "%I:%M %p",     // 12hour with AM/PM but without seconds
         "%H:%M",        // and a possibly 24 hour version without seconds
         "%H:%M:%S",     // could be the same or 24 hour one so try it too
         "%I:%M %p",     // 12hour with AM/PM but without seconds
         "%H:%M",        // and a possibly 24 hour version without seconds
+        "%I %p",        // just hour with AM/AM
+        "%H",           // just hour in 24 hour version
         "%X",           // possibly something from above or maybe something
                         // completely different -- try it last
 
         "%X",           // possibly something from above or maybe something
                         // completely different -- try it last
 
index 39ef9387a0f07a551d4ae18dc86a7706921f2e65..67f9269c2ac51d994888166c15bc2c55244cd1e1 100644 (file)
@@ -222,6 +222,7 @@ private:
         CPPUNIT_TEST( TestTimeWDays );
         CPPUNIT_TEST( TestTimeDST );
         CPPUNIT_TEST( TestTimeFormat );
         CPPUNIT_TEST( TestTimeWDays );
         CPPUNIT_TEST( TestTimeDST );
         CPPUNIT_TEST( TestTimeFormat );
+        CPPUNIT_TEST( TestTimeParse );
         CPPUNIT_TEST( TestTimeSpanFormat );
         CPPUNIT_TEST( TestTimeTicks );
         CPPUNIT_TEST( TestParceRFC822 );
         CPPUNIT_TEST( TestTimeSpanFormat );
         CPPUNIT_TEST( TestTimeTicks );
         CPPUNIT_TEST( TestParceRFC822 );
@@ -240,6 +241,7 @@ private:
     void TestTimeWDays();
     void TestTimeDST();
     void TestTimeFormat();
     void TestTimeWDays();
     void TestTimeDST();
     void TestTimeFormat();
+    void TestTimeParse();
     void TestTimeSpanFormat();
     void TestTimeTicks();
     void TestParceRFC822();
     void TestTimeSpanFormat();
     void TestTimeTicks();
     void TestParceRFC822();
@@ -863,6 +865,24 @@ void DateTimeTestCase::TestTimeFormat()
     dt.ParseFormat(s.c_str(), spec);
 }
 
     dt.ParseFormat(s.c_str(), spec);
 }
 
+// Test parsing time in free format.
+void DateTimeTestCase::TestTimeParse()
+{
+    wxDateTime dt;
+
+    // Parsing standard formats should work.
+    CPPUNIT_ASSERT( dt.ParseTime("12:34:56") );
+    CPPUNIT_ASSERT_EQUAL( "12:34:56", dt.FormatISOTime() );
+
+    // Parsing just hours should work too.
+    dt.ResetTime();
+    CPPUNIT_ASSERT( dt.ParseTime("17") );
+    CPPUNIT_ASSERT_EQUAL( "17:00:00", dt.FormatISOTime() );
+
+    // Parsing gibberish shouldn't work.
+    CPPUNIT_ASSERT( !dt.ParseTime("bloordyblop") );
+}
+
 void DateTimeTestCase::TestTimeSpanFormat()
 {
     static const struct TimeSpanFormatTestData
 void DateTimeTestCase::TestTimeSpanFormat()
 {
     static const struct TimeSpanFormatTestData