diff --git a/libgnucash/backend/sql/gnc-sql-column-table-entry.cpp b/libgnucash/backend/sql/gnc-sql-column-table-entry.cpp index 3f7a546ac2..b11a31a070 100644 --- a/libgnucash/backend/sql/gnc-sql-column-table-entry.cpp +++ b/libgnucash/backend/sql/gnc-sql-column-table-entry.cpp @@ -393,7 +393,13 @@ GncSqlColumnTableEntryImpl::load (const GncSqlBackend* sql_be, { try { + constexpr size_t datelen = 14; auto val = row.get_string_at_col(m_col_name); + if (val.length() == datelen) + val = std::string(val.substr(0, 4) + "-" + val.substr(4, 2) + + "-" + val.substr(6, 2) + " " + + val.substr(8, 2) + ":" + val.substr(10, 2) + + ":" + val.substr(12, 2)); GncDateTime time(val); ts.tv_sec = static_cast(time); } diff --git a/libgnucash/engine/test/gtest-gnc-datetime.cpp b/libgnucash/engine/test/gtest-gnc-datetime.cpp index b33423061a..936e8befb1 100644 --- a/libgnucash/engine/test/gtest-gnc-datetime.cpp +++ b/libgnucash/engine/test/gtest-gnc-datetime.cpp @@ -259,6 +259,19 @@ TEST(gnc_datetime_constructors, test_time64_constructor) EXPECT_EQ(static_cast(atime), time); } +TEST(gnc_datetime_constructors, test_string_constructor) +{ + std::string timestr("2015-12-05 00:01:00"); + GncDateTime time(timestr); + auto tm = time.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, 0); + EXPECT_EQ(tm.tm_min, 1); + EXPECT_EQ(tm.tm_sec, 0); +} + TEST(gnc_datetime_constructors, test_struct_tm_constructor) { #ifdef HAVE_STRUCT_TM_GMTOFF