diff --git a/src/common/datetimefmt.cpp b/src/common/datetimefmt.cpp index 0a8d753c22..79993651cd 100644 --- a/src/common/datetimefmt.cpp +++ b/src/common/datetimefmt.cpp @@ -2071,6 +2071,11 @@ wxDateTime::ParseDate(const wxString& date, wxString::const_iterator *end) if ( !haveDay && !haveWDay ) return false; + // even if haveDay == true, we cannot construct a date from a day number + // alone, without at least a weekday or month + if ( !haveWDay && !haveMon ) + return false; + if ( haveWDay && (haveMon || haveYear || haveDay) && !(haveDay && haveMon && haveYear) ) { diff --git a/tests/datetime/datetimetest.cpp b/tests/datetime/datetimetest.cpp index 252c7b6c35..bb1086eca9 100644 --- a/tests/datetime/datetimetest.cpp +++ b/tests/datetime/datetimetest.cpp @@ -1220,6 +1220,7 @@ void DateTimeTestCase::TestDateParse() { "31/04/06" }, { "bloordyblop" }, { "2 . . " }, + { "14:30:15" }, }; wxGCC_WARNING_RESTORE(missing-field-initializers) @@ -1234,7 +1235,7 @@ void DateTimeTestCase::TestDateParse() const wxString datestr = TranslateDate(parseTestDates[n].str); const char * const end = dt.ParseDate(datestr); - if ( end && !*end ) + if ( end ) { WX_ASSERT_MESSAGE( ("Erroneously parsed \"%s\"", datestr), @@ -1358,6 +1359,13 @@ void DateTimeTestCase::TestDateTimeParse() true }, + { + // date after time + "14:30:00 2020-01-04", + { 4, wxDateTime::Jan, 2020, 14, 30, 0 }, + true, + }, + { "bloordyblop", { 1, wxDateTime::Jan, 9999, 0, 0, 0}, @@ -1367,7 +1375,8 @@ void DateTimeTestCase::TestDateTimeParse() { "2012-01-01 10:12:05 +0100", { 1, wxDateTime::Jan, 2012, 10, 12, 5, -1 }, - false // ParseDateTime does know yet +0100 + true // ParseDateTime does know yet +0100, but + // ignoring that, parsing still succeeds }, }; @@ -1383,7 +1392,7 @@ void DateTimeTestCase::TestDateTimeParse() const wxString datestr = TranslateDate(parseTestDates[n].str); const char * const end = dt.ParseDateTime(datestr); - if ( end && !*end ) + if ( end ) { WX_ASSERT_MESSAGE( ("Erroneously parsed \"%s\"", datestr),