From d43370b8a879f5d318701de4f16808a7cb1de77e Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 21 Aug 2013 11:17:42 +0100 Subject: [PATCH] Try to fix timezone offset formatting. --- src/metadata.cc | 27 +++++++++++-------- src/metadata.h | 6 ++--- test/tests.cc | 2 +- ...g_test.cc => utc_offset_to_string_test.cc} | 14 +++++----- 4 files changed, 27 insertions(+), 22 deletions(-) rename test/{bias_to_string_test.cc => utc_offset_to_string_test.cc} (61%) diff --git a/src/metadata.cc b/src/metadata.cc index 5304fd96..bcf5d76c 100644 --- a/src/metadata.cc +++ b/src/metadata.cc @@ -52,25 +52,30 @@ void XMLMetadata::set_issue_date_now () { char buffer[64]; - time_t now; - time (&now); + time_t now = time (0); struct tm* tm = localtime (&now); -#ifdef LIBDCP_POSIX - strftime (buffer, 64, "%Y-%m-%dT%I:%M:%S%z", tm); - issue_date = string (buffer); -#else - /* No %z for strftime on Windows: it will seemingly be interpreted as %Z and will - output some localised string describing the timezone */ strftime (buffer, 64, "%Y-%m-%dT%I:%M:%S", tm); + int offset = 0; + +#ifdef LIBDCP_POSIX + + offset = tm->tm_gmtoff / 60; + +#else TIME_ZONE_INFORMATION tz; GetTimeZoneInformation (&tz); - issue_date = string (buffer) + bias_to_string (tz.Bias); + offset = tz.Bias; #endif + + issue_date = string (buffer) + utc_offset_to_string (offset); } +/** @param b Offset from UTC to local time in minutes. + * @return string of the form e.g. -01:00. + */ string -XMLMetadata::bias_to_string (int b) +XMLMetadata::utc_offset_to_string (int b) { bool const negative = (b < 0); b = negative ? -b : b; @@ -85,6 +90,6 @@ XMLMetadata::bias_to_string (int b) o << "+"; } - o << setw(2) << setfill('0') << hours << setw(2) << setfill('0') << minutes; + o << setw(2) << setfill('0') << hours << ":" << setw(2) << setfill('0') << minutes; return o.str (); } diff --git a/src/metadata.h b/src/metadata.h index 7ba17fa4..d71537fd 100644 --- a/src/metadata.h +++ b/src/metadata.h @@ -26,7 +26,7 @@ #include -class bias_to_string_test; +class utc_offset_to_string_test; namespace libdcp { @@ -53,9 +53,9 @@ public: std::string issue_date; private: - friend class ::bias_to_string_test; + friend class ::utc_offset_to_string_test; - static std::string bias_to_string (int); + static std::string utc_offset_to_string (int); }; } diff --git a/test/tests.cc b/test/tests.cc index 11189558..2543d025 100644 --- a/test/tests.cc +++ b/test/tests.cc @@ -70,7 +70,7 @@ wav (libdcp::Channel) static string test_corpus = "../libdcp-test"; -#include "bias_to_string_test.cc" +#include "utc_offset_to_string_test.cc" #include "lut_test.cc" #include "util_test.cc" #include "decryption_test.cc" diff --git a/test/bias_to_string_test.cc b/test/utc_offset_to_string_test.cc similarity index 61% rename from test/bias_to_string_test.cc rename to test/utc_offset_to_string_test.cc index 56df40ea..6ea597f0 100644 --- a/test/bias_to_string_test.cc +++ b/test/utc_offset_to_string_test.cc @@ -19,12 +19,12 @@ #include "metadata.h" -/** Test XMLMetadata::bias_to_string */ -BOOST_AUTO_TEST_CASE (bias_to_string_test) +/** Test XMLMetadata::utc_offset_to_string */ +BOOST_AUTO_TEST_CASE (utc_offset_to_string_test) { - BOOST_CHECK_EQUAL (libdcp::XMLMetadata::bias_to_string (30), "+0030"); - BOOST_CHECK_EQUAL (libdcp::XMLMetadata::bias_to_string (60), "+0100"); - BOOST_CHECK_EQUAL (libdcp::XMLMetadata::bias_to_string (61), "+0101"); - BOOST_CHECK_EQUAL (libdcp::XMLMetadata::bias_to_string (7 * 60), "+0700"); - BOOST_CHECK_EQUAL (libdcp::XMLMetadata::bias_to_string (-11 * 60), "-1100"); + BOOST_CHECK_EQUAL (libdcp::XMLMetadata::utc_offset_to_string (30), "+00:30"); + BOOST_CHECK_EQUAL (libdcp::XMLMetadata::utc_offset_to_string (60), "+01:00"); + BOOST_CHECK_EQUAL (libdcp::XMLMetadata::utc_offset_to_string (61), "+01:01"); + BOOST_CHECK_EQUAL (libdcp::XMLMetadata::utc_offset_to_string (7 * 60), "+07:00"); + BOOST_CHECK_EQUAL (libdcp::XMLMetadata::utc_offset_to_string (-11 * 60), "-11:00"); } -- 2.30.2