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)
|
if (_precision == Precision::Invalid)
|
||||||
return "";
|
return "";
|
||||||
|
|||||||
@@ -471,7 +471,7 @@ namespace lms::core::stringUtils
|
|||||||
if (dateTime.isValid())
|
if (dateTime.isValid())
|
||||||
{
|
{
|
||||||
// assume UTC
|
// 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 "";
|
return "";
|
||||||
@@ -491,6 +491,9 @@ namespace lms::core::stringUtils
|
|||||||
Wt::WDateTime fromISO8601String(std::string_view dateTime)
|
Wt::WDateTime fromISO8601String(std::string_view dateTime)
|
||||||
{
|
{
|
||||||
// assume UTC
|
// 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");
|
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 fromString(std::string_view str);
|
||||||
static PartialDateTime fromWtDateTime(const Wt::WDateTime& dateTime);
|
static PartialDateTime fromWtDateTime(const Wt::WDateTime& dateTime);
|
||||||
std::string toISO8601String() const;
|
std::string toString() const;
|
||||||
|
|
||||||
constexpr bool isValid() const { return _precision != Precision::Invalid; }
|
constexpr bool isValid() const { return _precision != Precision::Invalid; }
|
||||||
|
|
||||||
|
|||||||
@@ -61,21 +61,21 @@ namespace lms::core::stringUtils::tests
|
|||||||
|
|
||||||
TEST(PartialDateTime, stringComparison)
|
TEST(PartialDateTime, stringComparison)
|
||||||
{
|
{
|
||||||
EXPECT_EQ((PartialDateTime{ 1992, 3, 27 }.toISO8601String()), (PartialDateTime{ 1992, 3, 27 }.toISO8601String()));
|
EXPECT_EQ((PartialDateTime{ 1992, 3, 27 }.toString()), (PartialDateTime{ 1992, 3, 27 }.toString()));
|
||||||
EXPECT_EQ((PartialDateTime{ 1992, 3 }.toISO8601String()), (PartialDateTime{ 1992, 3 }.toISO8601String()));
|
EXPECT_EQ((PartialDateTime{ 1992, 3 }.toString()), (PartialDateTime{ 1992, 3 }.toString()));
|
||||||
EXPECT_EQ(PartialDateTime{ 1992 }.toISO8601String(), PartialDateTime{ 1992 }.toISO8601String());
|
EXPECT_EQ(PartialDateTime{ 1992 }.toString(), PartialDateTime{ 1992 }.toString());
|
||||||
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toISO8601String()), (PartialDateTime{ 1992, 3 }.toISO8601String()));
|
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toString()), (PartialDateTime{ 1992, 3 }.toString()));
|
||||||
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toISO8601String()), (PartialDateTime{ 1992 }.toISO8601String()));
|
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toString()), (PartialDateTime{ 1992 }.toString()));
|
||||||
EXPECT_NE((PartialDateTime{ 1992, 3 }.toISO8601String()), (PartialDateTime{ 1992 }.toISO8601String()));
|
EXPECT_NE((PartialDateTime{ 1992, 3 }.toString()), (PartialDateTime{ 1992 }.toString()));
|
||||||
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toISO8601String()), (PartialDateTime{ 1992, 3, 28 }.toISO8601String()));
|
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toString()), (PartialDateTime{ 1992, 3, 28 }.toString()));
|
||||||
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toISO8601String()), (PartialDateTime{ 1992, 4, 27 }.toISO8601String()));
|
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toString()), (PartialDateTime{ 1992, 4, 27 }.toString()));
|
||||||
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toISO8601String()), (PartialDateTime{ 1993, 3, 27 }.toISO8601String()));
|
EXPECT_NE((PartialDateTime{ 1992, 3, 27 }.toString()), (PartialDateTime{ 1993, 3, 27 }.toString()));
|
||||||
EXPECT_GT((PartialDateTime{ 1993, 3, 28 }.toISO8601String()), (PartialDateTime{ 1993, 3, 27 }.toISO8601String()));
|
EXPECT_GT((PartialDateTime{ 1993, 3, 28 }.toString()), (PartialDateTime{ 1993, 3, 27 }.toString()));
|
||||||
EXPECT_GT((PartialDateTime{ 1993, 4 }.toISO8601String()), (PartialDateTime{ 1993, 3, 27 }.toISO8601String()));
|
EXPECT_GT((PartialDateTime{ 1993, 4 }.toString()), (PartialDateTime{ 1993, 3, 27 }.toString()));
|
||||||
EXPECT_GT((PartialDateTime{ 1994 }.toISO8601String()), (PartialDateTime{ 1993, 3, 27 }.toISO8601String()));
|
EXPECT_GT((PartialDateTime{ 1994 }.toString()), (PartialDateTime{ 1993, 3, 27 }.toString()));
|
||||||
EXPECT_LT((PartialDateTime{ 1993, 3, 27 }.toISO8601String()), (PartialDateTime{ 1993, 3, 28 }.toISO8601String()));
|
EXPECT_LT((PartialDateTime{ 1993, 3, 27 }.toString()), (PartialDateTime{ 1993, 3, 28 }.toString()));
|
||||||
EXPECT_LT((PartialDateTime{ 1993, 3, 27 }.toISO8601String()), (PartialDateTime{ 1993, 4 }.toISO8601String()));
|
EXPECT_LT((PartialDateTime{ 1993, 3, 27 }.toString()), (PartialDateTime{ 1993, 4 }.toString()));
|
||||||
EXPECT_LT((PartialDateTime{ 1993, 3, 27 }.toISO8601String()), (PartialDateTime{ 1994 }.toISO8601String()));
|
EXPECT_LT((PartialDateTime{ 1993, 3, 27 }.toString()), (PartialDateTime{ 1994 }.toString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(PartialDateTime, stringConversions)
|
TEST(PartialDateTime, stringConversions)
|
||||||
@@ -120,7 +120,7 @@ namespace lms::core::stringUtils::tests
|
|||||||
for (const TestCase& test : tests)
|
for (const TestCase& test : tests)
|
||||||
{
|
{
|
||||||
const PartialDateTime dateTime{ PartialDateTime::fromString(test.input) };
|
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
|
} // 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 } };
|
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 } };
|
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)
|
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-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("2020-01-03"), Wt::WDateTime{});
|
||||||
EXPECT_EQ(fromISO8601String(""), Wt::WDateTime{});
|
EXPECT_EQ(fromISO8601String(""), Wt::WDateTime{});
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ namespace Wt::Dbo
|
|||||||
if (!dateTime.isValid())
|
if (!dateTime.isValid())
|
||||||
statement->bindNull(column);
|
statement->bindNull(column);
|
||||||
else
|
else
|
||||||
statement->bind(column, dateTime.toISO8601String());
|
statement->bind(column, dateTime.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool read(lms::core::PartialDateTime& dateTime, SqlStatement* statement, int column, int size)
|
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;
|
std::cout << "Position: " << *track->position << std::endl;
|
||||||
|
|
||||||
if (track->date.isValid())
|
if (track->date.isValid())
|
||||||
std::cout << "Date: " << track->date.toISO8601String() << std::endl;
|
std::cout << "Date: " << track->date.toString() << std::endl;
|
||||||
|
|
||||||
if (track->originalDate.isValid())
|
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)
|
if (track->originalYear)
|
||||||
std::cout << "Original year: " << *track->originalYear << std::endl;
|
std::cout << "Original year: " << *track->originalYear << std::endl;
|
||||||
|
|
||||||
@@ -336,7 +336,7 @@ namespace lms::metadata
|
|||||||
std::cout << "Advisory: " << *track->advisory << std::endl;
|
std::cout << "Advisory: " << *track->advisory << std::endl;
|
||||||
|
|
||||||
if (track->encodingTime.isValid())
|
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)
|
if (track->medium)
|
||||||
std::cout << "Medium: " << *track->medium;
|
std::cout << "Medium: " << *track->medium;
|
||||||
|
|||||||
Reference in New Issue
Block a user