libdcp
local_time.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2014-2021 Carl Hetherington <cth@carlh.net>
3 
4  This file is part of libdcp.
5 
6  libdcp is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10 
11  libdcp is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with libdcp. If not, see <http://www.gnu.org/licenses/>.
18 
19  In addition, as a special exception, the copyright holders give
20  permission to link the code of portions of this program with the
21  OpenSSL library under certain conditions as described in each
22  individual source file, and distribute linked combinations
23  including the two.
24 
25  You must obey the GNU General Public License in all respects
26  for all of the code used other than OpenSSL. If you modify
27  file(s) with this exception, you may extend this exception to your
28  version of the file(s), but you are not obligated to do so. If you
29  do not wish to do so, delete this exception statement from your
30  version. If you delete this exception statement from all source
31  files in the program, then also delete it here.
32 */
33 
34 
40 #ifndef LIBDCP_LOCAL_TIME_H
41 #define LIBDCP_LOCAL_TIME_H
42 
43 
44 #include <boost/date_time/posix_time/posix_time.hpp>
45 #include <string>
46 
47 
48 class local_time_basic_test;
49 
50 
51 namespace dcp {
52 
53 
63 class LocalTime
64 {
65 public:
67  LocalTime ();
68 
69  explicit LocalTime (struct tm tm);
70 
74  explicit LocalTime (boost::posix_time::ptime);
75 
80  LocalTime (boost::posix_time::ptime, int tz_hour, int tz_minute);
81 
83  explicit LocalTime (std::string s);
84 
86  std::string as_string (bool with_millisecond = false) const;
87 
89  std::string date () const;
90 
92  std::string time_of_day (bool with_second, bool with_millisecond) const;
93 
94  int day () const {
95  return _day;
96  }
97 
98  int month () const {
99  return _month;
100  }
101 
102  int year () const {
103  return _year;
104  }
105 
106  int hour () const {
107  return _hour;
108  }
109 
110  int minute () const {
111  return _minute;
112  }
113 
114  int second () const {
115  return _second;
116  }
117 
118  void set_year (int y) {
119  _year = y;
120  }
121 
122  void add_days (int d);
123  void add_months (int a);
124  void add_minutes (int a);
125 
126  static LocalTime from_asn1_utc_time (std::string time);
127  static LocalTime from_asn1_generalized_time (std::string time);
128 
129  bool operator== (LocalTime const & other) const;
130  bool operator!= (LocalTime const & other) const;
131  bool operator< (LocalTime const & other) const;
132 
133 private:
134  friend class ::local_time_basic_test;
135 
136  void set (struct tm const * tm);
137  void set (boost::posix_time::ptime);
138  void set_local_time_zone ();
139 
140  /* Local time */
141  int _year = 0;
142  int _month = 0;
143  int _day = 0;
144  int _hour = 0;
145  int _minute = 0;
146  int _second = 0;
147  int _millisecond = 0;
148 
149  int _tz_hour = 0;
153  int _tz_minute = 0;
154 };
155 
156 
157 std::ostream&
158 operator<< (std::ostream& s, LocalTime const & t);
159 
160 
161 }
162 
163 
164 #endif
A representation of a local time (down to the second), including its offset from GMT (equivalent to x...
Definition: local_time.h:64
std::string as_string(bool with_millisecond=false) const
Definition: local_time.cc:186
std::string date() const
Definition: local_time.cc:199
int _day
day number of the month (1-31)
Definition: local_time.h:143
int _hour
hour number of the day (0-23)
Definition: local_time.h:144
int _tz_hour
hours by which this time is offset from UTC; can be negative
Definition: local_time.h:149
int _millisecond
millisecond number of the second (0-999)
Definition: local_time.h:147
std::string time_of_day(bool with_second, bool with_millisecond) const
Definition: local_time.cc:208
void set_local_time_zone()
Definition: local_time.cc:116
int _second
second number of the minute (0-59)
Definition: local_time.h:146
int _month
month number of the year (1-12)
Definition: local_time.h:142
int _year
year
Definition: local_time.h:141
int _minute
minute number of the hour (0-59)
Definition: local_time.h:145
Namespace for everything in libdcp.
Definition: array_data.h:50