From cba9d74bec5722db9079ecb8b5d4fc4bcb757a54 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 8 Nov 2019 23:48:42 +0100 Subject: Fix incorrect LocalTime strings when timezone is behind UTC and not an integer number of hours. --- src/local_time.cc | 10 +++++++--- src/local_time.h | 7 +++++-- 2 files changed, 12 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/local_time.cc b/src/local_time.cc index 401bd9d7..5030500e 100644 --- a/src/local_time.cc +++ b/src/local_time.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2014 Carl Hetherington + Copyright (C) 2014-2019 Carl Hetherington This file is part of libdcp. @@ -81,7 +81,10 @@ LocalTime::LocalTime (boost::posix_time::ptime t) set_local_time_zone (); } -/** Construct a LocalTime from a boost::posix_time::ptime and a time zone offset */ +/** Construct a LocalTime from a boost::posix_time::ptime and a time zone offset. + * @param tz_minute Offset from UTC in minutes; if the timezone is behind UTC this may be negative, + * e.g. -04:30 would have tz_hour=-1 and tz_minute=-30. + */ LocalTime::LocalTime (boost::posix_time::ptime t, int tz_hour, int tz_minute) { _year = t.date().year (); @@ -163,6 +166,7 @@ LocalTime::LocalTime (string s) if (with_tz && s[tz_pos] == '-') { _tz_hour = -_tz_hour; + _tz_minute = -_tz_minute; } } @@ -174,7 +178,7 @@ LocalTime::as_string (bool with_millisecond) const snprintf ( buffer, sizeof (buffer), "%sT%s%s%02d:%02d", - date().c_str(), time_of_day(true, with_millisecond).c_str(), (_tz_hour >= 0 ? "+" : "-"), abs (_tz_hour), _tz_minute + date().c_str(), time_of_day(true, with_millisecond).c_str(), (_tz_hour >= 0 ? "+" : "-"), abs (_tz_hour), abs(_tz_minute) ); return buffer; } diff --git a/src/local_time.h b/src/local_time.h index ad55ad5a..20658eb4 100644 --- a/src/local_time.h +++ b/src/local_time.h @@ -84,8 +84,11 @@ private: int _second; ///< second number of the minute (0-59) int _millisecond; ///< millisecond number of the second (0-999) - int _tz_hour; ///< hours by which this time is offset from UTC - int _tz_minute; ///< minutes by which this time is offset from UTC + int _tz_hour; ///< hours by which this time is offset from UTC; can be negative + /** Minutes by which this time is offset from UTC; if _tz_hour is negative + * this will be either 0 or negative. + */ + int _tz_minute; }; std::ostream& -- cgit v1.2.3