Bv2.1 7.2.3: Check that subtitle <StartTime> exists and is 0.
[libdcp.git] / src / local_time.h
index 1e4c8228c1f887fbb27436b224132142283bf6be..e818ba6e32a9165fc9bb9ef53cab161967c1d309 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2014-2015 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2014-2020 Carl Hetherington <cth@carlh.net>
 
     This file is part of libdcp.
 
@@ -41,7 +41,7 @@
 #include <boost/date_time/posix_time/posix_time.hpp>
 #include <string>
 
-class local_time_test;
+class local_time_basic_test;
 
 namespace dcp {
 
@@ -58,20 +58,44 @@ class LocalTime
 {
 public:
        LocalTime ();
+       explicit LocalTime (struct tm tm);
        explicit LocalTime (boost::posix_time::ptime);
        LocalTime (boost::posix_time::ptime, int tz_hour, int tz_minute);
        explicit LocalTime (std::string);
 
        std::string as_string (bool with_millisecond = false) const;
        std::string date () const;
-       std::string time_of_day (bool with_millisecond = false) const;
+       std::string time_of_day (bool with_second, bool with_millisecond) const;
+
+       int day () const {
+               return _day;
+       }
+
+       int month () const {
+               return _month;
+       }
+
+       int year () const {
+               return _year;
+       }
+
+       void set_year (int y) {
+               _year = y;
+       }
+
+       void add_days (int d);
+       void add_months (int a);
+       void add_minutes (int a);
 
        bool operator== (LocalTime const & other) const;
        bool operator!= (LocalTime const & other) const;
+       bool operator< (LocalTime const & other) const;
 
 private:
-       friend class ::local_time_test;
+       friend class ::local_time_basic_test;
 
+       void set (struct tm const * tm);
+       void set (boost::posix_time::ptime);
        void set_local_time_zone ();
 
        /* Local time */
@@ -83,8 +107,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&