From 53e5cc6af1d55844b6145b54b916e10bba6d5348 Mon Sep 17 00:00:00 2001 From: naoto Date: Mon, 15 Sep 2025 14:42:19 +0900 Subject: [PATCH 1/3] add unit test --- trantor/unittests/DateUnittest.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/trantor/unittests/DateUnittest.cc b/trantor/unittests/DateUnittest.cc index 4583bc98..3fe05bb5 100644 --- a/trantor/unittests/DateUnittest.cc +++ b/trantor/unittests/DateUnittest.cc @@ -106,9 +106,14 @@ TEST(Date, DatabaseStringTest) dbDate = trantor::Date::fromDbString(dbString); us = (dbDate.microSecondsSinceEpoch() % 1000000); EXPECT_EQ(us, 3); + + dbString = "1970-01-01"; + dbDateGMT = trantor::Date::fromDbString(dbString); + auto epoch = dbDateGMT.microSecondsSinceEpoch(); + EXPECT_EQ(epoch,0); } int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); -} \ No newline at end of file +} From db37d3a772bf4ca7cc57ab5de0a2d6c1c9902914 Mon Sep 17 00:00:00 2001 From: naoto Date: Mon, 15 Sep 2025 14:47:31 +0900 Subject: [PATCH 2/3] modify for datetime format is YYYY-MM-DD --- trantor/utils/Date.cc | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/trantor/utils/Date.cc b/trantor/utils/Date.cc index 0da38731..d7fbe39c 100644 --- a/trantor/utils/Date.cc +++ b/trantor/utils/Date.cc @@ -284,12 +284,35 @@ Date Date::fromDbStringLocal(const std::string &datetime) unsigned int year = {0}, month = {0}, day = {0}, hour = {0}, minute = {0}, second = {0}, microSecond = {0}; std::vector &&v = splitString(datetime, " "); - if (2 == v.size()) + + if(v.size()==0){ + throw std::invalid_argument("Invalid date string: " + datetime); + } + const std::vector date = splitString(v[0], "-"); + if (date.size() != 3) + { + throw std::invalid_argument("Invalid date string: " + datetime); + } + if (v.size() == 1) { - // date - std::vector date = splitString(v[0], "-"); - if (3 == date.size()) + // Fromat YYYY-MM-DD is given + try + { + year = std::stol(date[0]); + month = std::stol(date[1]); + day = std::stol(date[2]); + } + catch (...) { + throw std::invalid_argument("Invalid date string: " + datetime); + } + return Date(year, month, day, hour, minute, second, microSecond); + } + + if (v.size() == 2) + { + // Format YYYY-MM-DD HH:MM:SS[.UUUUUU] is given + try{ year = std::stol(date[0]); month = std::stol(date[1]); day = std::stol(date[2]); @@ -313,10 +336,15 @@ Date Date::fromDbStringLocal(const std::string &datetime) microSecond = std::stol(seconds[1]); } } + }catch(...){ + throw std::invalid_argument("Invalid date string: " + datetime); } + return Date(year, month, day, hour, minute, second, microSecond); } - return trantor::Date(year, month, day, hour, minute, second, microSecond); + + throw std::invalid_argument("Invalid date string: " + datetime); } + Date Date::fromDbString(const std::string &datetime) { return fromDbStringLocal(datetime).after( From 38896d6bbd20d1f34d40686bca674eaac19ba022 Mon Sep 17 00:00:00 2001 From: naoto Date: Mon, 15 Sep 2025 14:56:53 +0900 Subject: [PATCH 3/3] run format.sh --- trantor/unittests/DateUnittest.cc | 2 +- trantor/utils/Date.cc | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/trantor/unittests/DateUnittest.cc b/trantor/unittests/DateUnittest.cc index 3fe05bb5..9d516a75 100644 --- a/trantor/unittests/DateUnittest.cc +++ b/trantor/unittests/DateUnittest.cc @@ -110,7 +110,7 @@ TEST(Date, DatabaseStringTest) dbString = "1970-01-01"; dbDateGMT = trantor::Date::fromDbString(dbString); auto epoch = dbDateGMT.microSecondsSinceEpoch(); - EXPECT_EQ(epoch,0); + EXPECT_EQ(epoch, 0); } int main(int argc, char **argv) { diff --git a/trantor/utils/Date.cc b/trantor/utils/Date.cc index d7fbe39c..2dae6d48 100644 --- a/trantor/utils/Date.cc +++ b/trantor/utils/Date.cc @@ -285,7 +285,8 @@ Date Date::fromDbStringLocal(const std::string &datetime) second = {0}, microSecond = {0}; std::vector &&v = splitString(datetime, " "); - if(v.size()==0){ + if (v.size() == 0) + { throw std::invalid_argument("Invalid date string: " + datetime); } const std::vector date = splitString(v[0], "-"); @@ -312,7 +313,8 @@ Date Date::fromDbStringLocal(const std::string &datetime) if (v.size() == 2) { // Format YYYY-MM-DD HH:MM:SS[.UUUUUU] is given - try{ + try + { year = std::stol(date[0]); month = std::stol(date[1]); day = std::stol(date[2]); @@ -336,12 +338,14 @@ Date Date::fromDbStringLocal(const std::string &datetime) microSecond = std::stol(seconds[1]); } } - }catch(...){ + } + catch (...) + { throw std::invalid_argument("Invalid date string: " + datetime); } return Date(year, month, day, hour, minute, second, microSecond); } - + throw std::invalid_argument("Invalid date string: " + datetime); }