From 98052c06cbe3bd156e1a1a715e439944671dc3ee Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 9 Feb 2024 00:45:23 +0100 Subject: [PATCH] Fix use of Z as a timezone (meaning UTC). --- src/local_time.cc | 2 +- test/local_time_test.cc | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/local_time.cc b/src/local_time.cc index 7d090304..f125b38f 100644 --- a/src/local_time.cc +++ b/src/local_time.cc @@ -165,7 +165,7 @@ LocalTime::LocalTime (string s) } /* Timezone */ - if (pos != s.length()) { + if (pos != s.length() && s[pos] != 'Z') { if (s[pos] != '+' && s[pos] != '-') { throw TimeFormatError(s); } diff --git a/test/local_time_test.cc b/test/local_time_test.cc index 8d6d997e..894f177b 100644 --- a/test/local_time_test.cc +++ b/test/local_time_test.cc @@ -139,6 +139,19 @@ BOOST_AUTO_TEST_CASE (local_time_basic_test) BOOST_CHECK_EQUAL(t.as_string(false, false), "2011-11-20T01:06:59"); } + { + dcp::LocalTime t("2024-01-23T23:21:32Z"); + BOOST_CHECK_EQUAL(t._year, 2024); + BOOST_CHECK_EQUAL(t._month, 1); + BOOST_CHECK_EQUAL(t._day, 23); + BOOST_CHECK_EQUAL(t._hour, 23); + BOOST_CHECK_EQUAL(t._minute, 21); + BOOST_CHECK_EQUAL(t._second, 32); + BOOST_CHECK_EQUAL(t._millisecond, 0); + BOOST_CHECK(t._offset == dcp::UTCOffset(0, 0)); + BOOST_CHECK_EQUAL(t.as_string(false, false), "2024-01-23T23:21:32"); + } + { /* Construction from boost::posix_time::ptime */ dcp::LocalTime b (boost::posix_time::time_from_string ("2002-01-20 19:03:56")); -- 2.30.2