No-op; Fix GPL address and mention libdcp by name.
[libdcp.git] / src / local_time.cc
index 32e8e093bd2702b64fb828ccddc5320ccc8d6364..fa810a92d719f8b4819e0803ffea3361a2aaf17b 100644 (file)
@@ -1,19 +1,20 @@
 /*
     Copyright (C) 2014 Carl Hetherington <cth@carlh.net>
 
-    This program is free software; you can redistribute it and/or modify
+    This file is part of libdcp.
+
+    libdcp 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,
+    libdcp 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.
+    along with libdcp.  If not, see <http://www.gnu.org/licenses/>.
 
 */
 
@@ -29,6 +30,7 @@
 #include <cstdio>
 
 using std::string;
+using std::ostream;
 using boost::lexical_cast;
 using namespace dcp;
 
@@ -66,6 +68,22 @@ 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 */
+LocalTime::LocalTime (boost::posix_time::ptime t, int tz_hour, int tz_minute)
+{
+       _year = t.date().year ();
+       _month = t.date().month ();
+       _day = t.date().day ();
+       _hour = t.time_of_day().hours ();
+       _minute = t.time_of_day().minutes ();
+       _second = t.time_of_day().seconds ();
+       _millisecond = t.time_of_day().fractional_seconds () / 1000;
+       DCP_ASSERT (_millisecond < 1000);
+
+       _tz_hour = tz_hour;
+       _tz_minute = tz_minute;
+}
+
 /** Set our UTC offset to be according to the local time zone */
 void
 LocalTime::set_local_time_zone ()
@@ -83,7 +101,7 @@ LocalTime::LocalTime (string s)
 {
        /* 2013-01-05T18:06:59+04:00 or 2013-01-05T18:06:59.123+04:00 */
         /* 0123456789012345678901234 or 01234567890123456789012345678 */
-       
+
        if (s.length() < 25) {
                throw TimeFormatError (s);
        }
@@ -156,3 +174,24 @@ LocalTime::time_of_day (bool with_millisecond) const
        }
        return buffer;
 }
+
+bool
+LocalTime::operator== (LocalTime const & other) const
+{
+       return _year == other._year && _month == other._month && _day == other._day &&
+               _hour == other._hour && _second == other._second && _millisecond == other._millisecond &&
+               _tz_hour == other._tz_hour && _tz_minute == other._tz_minute;
+}
+
+bool
+LocalTime::operator!= (LocalTime const & other) const
+{
+       return !(*this == other);
+}
+
+ostream&
+dcp::operator<< (ostream& s, LocalTime const & t)
+{
+       s << t.as_string ();
+       return s;
+}