Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion trantor/unittests/DateUnittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}
42 changes: 37 additions & 5 deletions trantor/utils/Date.cc
Original file line number Diff line number Diff line change
Expand Up @@ -284,11 +284,36 @@ 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<std::string> &&v = splitString(datetime, " ");
if (2 == v.size())

if (v.size() == 0)
{
throw std::invalid_argument("Invalid date string: " + datetime);
}
const std::vector<std::string> date = splitString(v[0], "-");
if (date.size() != 3)
{
throw std::invalid_argument("Invalid date string: " + datetime);
}
if (v.size() == 1)
{
// date
std::vector<std::string> 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]);
Expand All @@ -314,9 +339,16 @@ Date Date::fromDbStringLocal(const std::string &datetime)
}
}
}
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(
Expand Down
Loading