diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-08-19 17:12:27 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-08-19 17:12:27 +0100 |
| commit | dc35647c6383d0585ed6d9d3dfde32ef129d0d80 (patch) | |
| tree | 529d3b9ab13ad2ed321092c904bdaa36add92f6e | |
| parent | 49f942e13b1380c4df474f45d657e1a46bb6e2d8 (diff) | |
Try to fix time zone offsets in Windows.
| -rw-r--r-- | src/metadata.cc | 33 | ||||
| -rw-r--r-- | src/metadata.h | 7 | ||||
| -rw-r--r-- | test/bias_to_string_test.cc | 30 | ||||
| -rw-r--r-- | test/tests.cc | 1 |
4 files changed, 70 insertions, 1 deletions
diff --git a/src/metadata.cc b/src/metadata.cc index fe883c94..3da7da12 100644 --- a/src/metadata.cc +++ b/src/metadata.cc @@ -21,6 +21,8 @@ * @brief Metadata for writing to the DCP. */ +#include <sstream> +#include <iomanip> #include <time.h> #include "metadata.h" @@ -50,7 +52,36 @@ XMLMetadata::set_issue_date_now () time_t now; time (&now); 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); + + TIME_ZONE_INFORMATION tz; + GetTimeZoneInformation (&tz); + issue_date = string (buffer) + bias_to_string (tz.Bias); +#endif +} + +string +XMLMetadata::bias_to_string (int b) +{ + bool const negative = (b < 0); + b = negative ? -b : b; + + int const hours = b / 60; + int const minutes = b % 60; + + stringstream o; + if (negative) { + o << "-"; + } else { + o << "+"; + } + + 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 7336766d..7ba17fa4 100644 --- a/src/metadata.h +++ b/src/metadata.h @@ -26,6 +26,8 @@ #include <string> +class bias_to_string_test; + namespace libdcp { @@ -49,6 +51,11 @@ public: std::string issuer; std::string creator; std::string issue_date; + +private: + friend class ::bias_to_string_test; + + static std::string bias_to_string (int); }; } diff --git a/test/bias_to_string_test.cc b/test/bias_to_string_test.cc new file mode 100644 index 00000000..56df40ea --- /dev/null +++ b/test/bias_to_string_test.cc @@ -0,0 +1,30 @@ +/* + Copyright (C) 2013 Carl Hetherington <cth@carlh.net> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "metadata.h" + +/** Test XMLMetadata::bias_to_string */ +BOOST_AUTO_TEST_CASE (bias_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"); +} diff --git a/test/tests.cc b/test/tests.cc index 1057f789..11189558 100644 --- a/test/tests.cc +++ b/test/tests.cc @@ -70,6 +70,7 @@ wav (libdcp::Channel) static string test_corpus = "../libdcp-test"; +#include "bias_to_string_test.cc" #include "lut_test.cc" #include "util_test.cc" #include "decryption_test.cc" |
