summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-08-19 17:12:27 +0100
committerCarl Hetherington <cth@carlh.net>2013-08-19 17:12:27 +0100
commitdc35647c6383d0585ed6d9d3dfde32ef129d0d80 (patch)
tree529d3b9ab13ad2ed321092c904bdaa36add92f6e /src
parent49f942e13b1380c4df474f45d657e1a46bb6e2d8 (diff)
Try to fix time zone offsets in Windows.
Diffstat (limited to 'src')
-rw-r--r--src/metadata.cc33
-rw-r--r--src/metadata.h7
2 files changed, 39 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);
};
}