diff --git a/src/common/datetime.cpp b/src/common/datetime.cpp index 8bd4933a18..0a58ed3f86 100644 --- a/src/common/datetime.cpp +++ b/src/common/datetime.cpp @@ -3667,6 +3667,11 @@ wxDateTime::ParseFormat(const wxString& date, Tm tm = tmDef; // set the date + if ( haveMon ) + { + tm.mon = mon; + } + if ( haveYear ) { tm.year = year; @@ -3675,16 +3680,15 @@ wxDateTime::ParseFormat(const wxString& date, // TODO we don't check here that the values are consistent, if both year // day and month/day were found, we just ignore the year day and we // also always ignore the week day - if ( haveMon && haveDay ) + if ( haveDay ) { - if ( mday > GetNumOfDaysInMonth(tm.year, mon) ) + if ( mday > GetNumOfDaysInMonth(tm.year, tm.mon) ) { wxLogDebug(_T("bad month day in wxDateTime::ParseFormat")); return NULL; } - tm.mon = mon; tm.mday = mday; } else if ( haveYDay ) diff --git a/tests/datetime/datetimetest.cpp b/tests/datetime/datetimetest.cpp index 48611e4480..b9a3b9caf3 100644 --- a/tests/datetime/datetimetest.cpp +++ b/tests/datetime/datetimetest.cpp @@ -645,7 +645,7 @@ void DateTimeTestCase::TestTimeFormat() const char *result = dt2.ParseFormat(s, fmt); if ( !result ) { - // converion failed - should it have? + // conversion failed - should it have? CPPUNIT_ASSERT( kind == CompareNone ); } else // conversion succeeded @@ -685,9 +685,15 @@ void DateTimeTestCase::TestTimeFormat() } } + wxDateTime dt; + + // test partially specified dates too + wxDateTime dtDef(26, wxDateTime::Sep, 2008); + CPPUNIT_ASSERT( dt.ParseFormat("17", "%d") ); + CPPUNIT_ASSERT_EQUAL( 17, dt.GetDay() ); + // test compilation of some calls which should compile (and not result in // ambiguity because of char*<->wxCStrData<->wxString conversions) - wxDateTime dt; wxString s("foo"); CPPUNIT_ASSERT( !dt.ParseFormat("foo") ); CPPUNIT_ASSERT( !dt.ParseFormat(wxT("foo")) );