Fix use of Z as a timezone (meaning UTC). v1.8.95
authorCarl Hetherington <cth@carlh.net>
Thu, 8 Feb 2024 23:45:23 +0000 (00:45 +0100)
committerCarl Hetherington <cth@carlh.net>
Thu, 8 Feb 2024 23:45:23 +0000 (00:45 +0100)
src/local_time.cc
test/local_time_test.cc

index 7d0903048658523e306b5fc81a21a1d069362553..f125b38f6cb12011cc8cd48926f8ab943e924fa6 100644 (file)
@@ -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);
                }
index 8d6d997eec8852375ad9b739229e3bcbc123c092..894f177b791404e85d5c55715129f0686c599de7 100644 (file)
@@ -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"));