Guitar
DateTime.h
Go to the documentation of this file.
1 #ifndef DATETIME_H
2 #define DATETIME_H
3 
4 #include <ctime>
5 #include <string>
6 #include <cstdint>
7 
8 class DateTime;
9 
10 class Date {
11 private:
12  bool valid_ = false;
13  int year_ = 0;
14  int month_ = 0;
15  int day_ = 0;
16 public:
17  Date() = default;
18  Date(int y, int m, int d)
19  : valid_(true)
20  , year_(y)
21  , month_(m)
22  , day_(d)
23  {}
24  int year() const { return year_; }
25  int month() const { return month_; }
26  int day() const { return day_; }
27  bool isValid() const { return valid_; }
28  std::string toString() const;
29 };
30 
31 class Time {
32 private:
33  bool valid_ = false;
34  int hour_ = 0;
35  int minute_ = 0;
36  int second_ = 0;
37 public:
38  Time() = default;
39  Time(int h, int m, int s)
40  : valid_(true)
41  , hour_(h)
42  , minute_(m)
43  , second_(s)
44  {}
45  int hour() const { return hour_; }
46  int minute() const { return minute_; }
47  int second() const { return second_; }
48  bool isValid() const { return valid_; }
49  std::string toString() const;
50 };
51 
52 class DateTime {
53 private:
56 public:
57  DateTime() = default;
58  DateTime(Date const &date, Time const &time)
59  : date_(date), time_(time)
60  {
61  }
62  Date const &date() const { return date_; }
63  Time const &time() const { return time_; }
64  void setDate(Date const &date)
65  {
66  date_ = date;
67  }
68  void setTime(Time const &time)
69  {
70  time_ = time;
71  }
72 
73  bool isValid() const
74  {
75  return date_.isValid() && time_.isValid();
76  }
77 
78  time_t toSecsSinceEpoch() const
79  {
80  struct tm t;
81  t.tm_year = date_.year() - 1900;
82  t.tm_mon = date_.month() - 1;
83  t.tm_mday = date_.day();
84  t.tm_hour = time_.hour();
85  t.tm_min = time_.minute();
86  t.tm_sec = time_.second();
87  t.tm_isdst = -1;
88  return mktime(&t);
89  }
90 
91  std::string toString() const;
92 
93  static DateTime parseDateTime(char const *s);
94  static DateTime fromSecsSinceEpoch(uint64_t t);
95 };
96 
97 #endif // DATETIME_H
Definition: DateTime.h:52
static DateTime fromSecsSinceEpoch(uint64_t t)
Definition: DateTime.cpp:58
time_t toSecsSinceEpoch() const
Definition: DateTime.h:78
bool isValid() const
Definition: DateTime.h:73
Time const & time() const
Definition: DateTime.h:63
std::string toString() const
Definition: DateTime.cpp:33
void setDate(Date const &date)
Definition: DateTime.h:64
void setTime(Time const &time)
Definition: DateTime.h:68
Date const & date() const
Definition: DateTime.h:62
static DateTime parseDateTime(char const *s)
Definition: DateTime.cpp:42
Date date_
Definition: DateTime.h:54
Time time_
Definition: DateTime.h:55
DateTime()=default
DateTime(Date const &date, Time const &time)
Definition: DateTime.h:58
Definition: DateTime.h:10
int year_
Definition: DateTime.h:13
int day_
Definition: DateTime.h:15
Date(int y, int m, int d)
Definition: DateTime.h:18
Date()=default
int day() const
Definition: DateTime.h:26
bool valid_
Definition: DateTime.h:12
bool isValid() const
Definition: DateTime.h:27
int month() const
Definition: DateTime.h:25
std::string toString() const
Definition: DateTime.cpp:5
int year() const
Definition: DateTime.h:24
int month_
Definition: DateTime.h:14
Definition: DateTime.h:31
Time()=default
int second_
Definition: DateTime.h:36
int hour() const
Definition: DateTime.h:45
int second() const
Definition: DateTime.h:47
bool valid_
Definition: DateTime.h:33
int minute() const
Definition: DateTime.h:46
Time(int h, int m, int s)
Definition: DateTime.h:39
bool isValid() const
Definition: DateTime.h:48
std::string toString() const
Definition: DateTime.cpp:19
int minute_
Definition: DateTime.h:35
int hour_
Definition: DateTime.h:34