Append Z to iso8601 date time strings

This commit is contained in:
emeric
2025-04-11 18:02:58 +02:00
parent ade4946b8c
commit a5b130305e
7 changed files with 29 additions and 25 deletions
+1 -1
View File
@@ -100,7 +100,7 @@ namespace lms::core
};
}
std::string PartialDateTime::toISO8601String() const
std::string PartialDateTime::toString() const
{
if (_precision == Precision::Invalid)
return "";
+4 -1
View File
@@ -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; }
+16 -16
View File
@@ -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
+3 -2
View File
@@ -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)
+3 -3
View File
@@ -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;