Append Z to iso8601 date time strings
This commit is contained in:
@@ -100,7 +100,7 @@ namespace lms::core
|
||||
};
|
||||
}
|
||||
|
||||
std::string PartialDateTime::toISO8601String() const
|
||||
std::string PartialDateTime::toString() const
|
||||
{
|
||||
if (_precision == Precision::Invalid)
|
||||
return "";
|
||||
|
||||
@@ -471,7 +471,7 @@ namespace lms::core::stringUtils
|
||||
if (dateTime.isValid())
|
||||
{
|
||||
// assume UTC
|
||||
return dateTime.toString("yyyy-MM-ddThh:mm:ss.zzz", false).toUTF8();
|
||||
return dateTime.toString("yyyy-MM-ddThh:mm:ss.zzz", false).toUTF8() + 'Z';
|
||||
}
|
||||
|
||||
return "";
|
||||
@@ -491,6 +491,9 @@ namespace lms::core::stringUtils
|
||||
Wt::WDateTime fromISO8601String(std::string_view dateTime)
|
||||
{
|
||||
// assume UTC
|
||||
if (!dateTime.empty() && dateTime.back() == 'Z')
|
||||
dateTime.remove_suffix(1);
|
||||
|
||||
return Wt::WDateTime::fromString(Wt::WString{ std::string{ dateTime } }, "yyyy-MM-ddThh:mm:ss.zzz");
|
||||
}
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace lms::core
|
||||
|
||||
static PartialDateTime fromString(std::string_view str);
|
||||
static PartialDateTime fromWtDateTime(const Wt::WDateTime& dateTime);
|
||||
std::string toISO8601String() const;
|
||||
std::string toString() const;
|
||||
|
||||
constexpr bool isValid() const { return _precision != Precision::Invalid; }
|
||||
|
||||
|
||||
@@ -61,21 +61,21 @@ namespace lms::core::stringUtils::tests
|
||||
|
||||
TEST(PartialDateTime, stringComparison)
|
||||
{
|
||||
EXPECT_EQ((PartialDateTime{ 1992, 3, 27 }.toISO8601String()), (PartialDateTime{ 1992, 3, 27 }.toISO8601String()));
|
||||
EXPECT_EQ((PartialDateTime{ 1992, 3 }.toISO8601String()), (PartialDateTime{ 1992, 3 }.toISO8601String()));
|
||||
EXPECT_EQ(PartialDateTime{ 1992 }.toISO8601String(), PartialDateTime{ 1992 }.toISO8601String());
|
||||
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toISO8601String()), (PartialDateTime{ 1992, 3 }.toISO8601String()));
|
||||
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toISO8601String()), (PartialDateTime{ 1992 }.toISO8601String()));
|
||||
EXPECT_NE((PartialDateTime{ 1992, 3 }.toISO8601String()), (PartialDateTime{ 1992 }.toISO8601String()));
|
||||
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toISO8601String()), (PartialDateTime{ 1992, 3, 28 }.toISO8601String()));
|
||||
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toISO8601String()), (PartialDateTime{ 1992, 4, 27 }.toISO8601String()));
|
||||
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toISO8601String()), (PartialDateTime{ 1993, 3, 27 }.toISO8601String()));
|
||||
EXPECT_GT((PartialDateTime{ 1993, 3, 28 }.toISO8601String()), (PartialDateTime{ 1993, 3, 27 }.toISO8601String()));
|
||||
EXPECT_GT((PartialDateTime{ 1993, 4 }.toISO8601String()), (PartialDateTime{ 1993, 3, 27 }.toISO8601String()));
|
||||
EXPECT_GT((PartialDateTime{ 1994 }.toISO8601String()), (PartialDateTime{ 1993, 3, 27 }.toISO8601String()));
|
||||
EXPECT_LT((PartialDateTime{ 1993, 3, 27 }.toISO8601String()), (PartialDateTime{ 1993, 3, 28 }.toISO8601String()));
|
||||
EXPECT_LT((PartialDateTime{ 1993, 3, 27 }.toISO8601String()), (PartialDateTime{ 1993, 4 }.toISO8601String()));
|
||||
EXPECT_LT((PartialDateTime{ 1993, 3, 27 }.toISO8601String()), (PartialDateTime{ 1994 }.toISO8601String()));
|
||||
EXPECT_EQ((PartialDateTime{ 1992, 3, 27 }.toString()), (PartialDateTime{ 1992, 3, 27 }.toString()));
|
||||
EXPECT_EQ((PartialDateTime{ 1992, 3 }.toString()), (PartialDateTime{ 1992, 3 }.toString()));
|
||||
EXPECT_EQ(PartialDateTime{ 1992 }.toString(), PartialDateTime{ 1992 }.toString());
|
||||
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toString()), (PartialDateTime{ 1992, 3 }.toString()));
|
||||
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toString()), (PartialDateTime{ 1992 }.toString()));
|
||||
EXPECT_NE((PartialDateTime{ 1992, 3 }.toString()), (PartialDateTime{ 1992 }.toString()));
|
||||
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toString()), (PartialDateTime{ 1992, 3, 28 }.toString()));
|
||||
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toString()), (PartialDateTime{ 1992, 4, 27 }.toString()));
|
||||
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toString()), (PartialDateTime{ 1993, 3, 27 }.toString()));
|
||||
EXPECT_GT((PartialDateTime{ 1993, 3, 28 }.toString()), (PartialDateTime{ 1993, 3, 27 }.toString()));
|
||||
EXPECT_GT((PartialDateTime{ 1993, 4 }.toString()), (PartialDateTime{ 1993, 3, 27 }.toString()));
|
||||
EXPECT_GT((PartialDateTime{ 1994 }.toString()), (PartialDateTime{ 1993, 3, 27 }.toString()));
|
||||
EXPECT_LT((PartialDateTime{ 1993, 3, 27 }.toString()), (PartialDateTime{ 1993, 3, 28 }.toString()));
|
||||
EXPECT_LT((PartialDateTime{ 1993, 3, 27 }.toString()), (PartialDateTime{ 1993, 4 }.toString()));
|
||||
EXPECT_LT((PartialDateTime{ 1993, 3, 27 }.toString()), (PartialDateTime{ 1994 }.toString()));
|
||||
}
|
||||
|
||||
TEST(PartialDateTime, stringConversions)
|
||||
@@ -120,7 +120,7 @@ namespace lms::core::stringUtils::tests
|
||||
for (const TestCase& test : tests)
|
||||
{
|
||||
const PartialDateTime dateTime{ PartialDateTime::fromString(test.input) };
|
||||
EXPECT_EQ(dateTime.toISO8601String(), test.expectedOutput) << "Input = '" << test.input;
|
||||
EXPECT_EQ(dateTime.toString(), test.expectedOutput) << "Input = '" << test.input;
|
||||
}
|
||||
}
|
||||
} // namespace lms::core::stringUtils::tests
|
||||
|
||||
@@ -316,12 +316,12 @@ namespace lms::core::stringUtils::tests
|
||||
{
|
||||
{
|
||||
const Wt::WDateTime dateTime{ Wt::WDate{ 2020, 01, 03 }, Wt::WTime{ 9, 8, 11, 75 } };
|
||||
EXPECT_EQ(toISO8601String(dateTime), "2020-01-03T09:08:11.075");
|
||||
EXPECT_EQ(toISO8601String(dateTime), "2020-01-03T09:08:11.075Z");
|
||||
}
|
||||
|
||||
{
|
||||
const Wt::WDateTime dateTime{ Wt::WDate{ 2020, 01, 03 } };
|
||||
EXPECT_EQ(toISO8601String(dateTime), "2020-01-03T00:00:00.000");
|
||||
EXPECT_EQ(toISO8601String(dateTime), "2020-01-03T00:00:00.000Z");
|
||||
}
|
||||
|
||||
{
|
||||
@@ -332,6 +332,7 @@ namespace lms::core::stringUtils::tests
|
||||
|
||||
TEST(Stringutils, DateTimeFromString)
|
||||
{
|
||||
EXPECT_EQ(fromISO8601String("2020-01-03T09:08:11.075Z"), (Wt::WDateTime{ Wt::WDate{ 2020, 01, 03 }, Wt::WTime{ 9, 8, 11, 75 } }));
|
||||
EXPECT_EQ(fromISO8601String("2020-01-03T09:08:11.075"), (Wt::WDateTime{ Wt::WDate{ 2020, 01, 03 }, Wt::WTime{ 9, 8, 11, 75 } }));
|
||||
EXPECT_EQ(fromISO8601String("2020-01-03"), Wt::WDateTime{});
|
||||
EXPECT_EQ(fromISO8601String(""), Wt::WDateTime{});
|
||||
|
||||
@@ -38,7 +38,7 @@ namespace Wt::Dbo
|
||||
if (!dateTime.isValid())
|
||||
statement->bindNull(column);
|
||||
else
|
||||
statement->bind(column, dateTime.toISO8601String());
|
||||
statement->bind(column, dateTime.toString());
|
||||
}
|
||||
|
||||
static bool read(lms::core::PartialDateTime& dateTime, SqlStatement* statement, int column, int size)
|
||||
|
||||
@@ -306,10 +306,10 @@ namespace lms::metadata
|
||||
std::cout << "Position: " << *track->position << std::endl;
|
||||
|
||||
if (track->date.isValid())
|
||||
std::cout << "Date: " << track->date.toISO8601String() << std::endl;
|
||||
std::cout << "Date: " << track->date.toString() << std::endl;
|
||||
|
||||
if (track->originalDate.isValid())
|
||||
std::cout << "Original date: " << track->originalDate.toISO8601String() << std::endl;
|
||||
std::cout << "Original date: " << track->originalDate.toString() << std::endl;
|
||||
if (track->originalYear)
|
||||
std::cout << "Original year: " << *track->originalYear << std::endl;
|
||||
|
||||
@@ -336,7 +336,7 @@ namespace lms::metadata
|
||||
std::cout << "Advisory: " << *track->advisory << std::endl;
|
||||
|
||||
if (track->encodingTime.isValid())
|
||||
std::cout << "Encoding time: " << track->encodingTime.toISO8601String() << std::endl;
|
||||
std::cout << "Encoding time: " << track->encodingTime.toString() << std::endl;
|
||||
|
||||
if (track->medium)
|
||||
std::cout << "Medium: " << *track->medium;
|
||||
|
||||
Reference in New Issue
Block a user