diff --git a/libgnucash/engine/gnc-datetime.cpp b/libgnucash/engine/gnc-datetime.cpp index 795ae5c4bb..2ddc9dddb7 100644 --- a/libgnucash/engine/gnc-datetime.cpp +++ b/libgnucash/engine/gnc-datetime.cpp @@ -294,16 +294,12 @@ GncDateTimeImpl::GncDateTimeImpl(const std::string str) : auto input_facet(new Facet()); std::istringstream ss(str.substr(0, tzpos)); ss.imbue(std::locale(std::locale(), input_facet)); - input_facet->set_iso_extended_format(); + if (str.find("-") == 4) + input_facet->set_iso_extended_format(); + else /* Not in iso format, try squashed format. */ + input_facet->format("%Y%m%d%H%M%S"); PTime pdt(not_a_date_time); ss >> pdt; - if (pdt.is_special()) - { - input_facet->format("%Y%m%d%H%M%S"); - ss.clear(); //Reset to the beginning. - ss.seekg(0); - ss >> pdt; - } m_time = LDT(pdt.date(), pdt.time_of_day(), tzptr, LDTBase::NOT_DATE_TIME_ON_ERROR); } @@ -450,7 +446,7 @@ GncDateTime::GncDateTime(const time64 time) : m_impl(new GncDateTimeImpl(time)) {} GncDateTime::GncDateTime(const struct tm tm) : m_impl(new GncDateTimeImpl(tm)) {} -GncDateTime::GncDateTime(const std::string str, std::string fmt) : +GncDateTime::GncDateTime(const std::string str) : m_impl(new GncDateTimeImpl(str)) {} GncDateTime::~GncDateTime() = default; diff --git a/libgnucash/engine/test/gtest-gnc-datetime.cpp b/libgnucash/engine/test/gtest-gnc-datetime.cpp index 245562b6da..65989bf4da 100644 --- a/libgnucash/engine/test/gtest-gnc-datetime.cpp +++ b/libgnucash/engine/test/gtest-gnc-datetime.cpp @@ -293,6 +293,16 @@ TEST(gnc_datetime_constructors, test_string_constructor) EXPECT_EQ(tm.tm_hour, 15); EXPECT_EQ(tm.tm_min, 8); EXPECT_EQ(tm.tm_sec, 19); +/* Squashed format from SQLite3 databases */ + timestr = "20151205115703"; + GncDateTime time4(timestr); + tm = time4.utc_tm(); + EXPECT_EQ(tm.tm_year, 115); + EXPECT_EQ(tm.tm_mon, 11); + EXPECT_EQ(tm.tm_mday, 5); + EXPECT_EQ(tm.tm_hour,11); + EXPECT_EQ(tm.tm_min, 57); + EXPECT_EQ(tm.tm_sec, 3); } TEST(gnc_datetime_constructors, test_struct_tm_constructor)