version 0.0.1
[fms.git] / include / datetime.h
1 #ifndef _date_time_\r
2 #define _date_time_\r
3 \r
4 #include <ctime>\r
5 #include <string>\r
6 \r
7 /*\r
8         Year    actual year\r
9         Month   1=Jan,2=Feb,etc\r
10         Day             1 to last day of month\r
11         Hour    0 to 23\r
12         Minute  0 to 59\r
13         Second  0 to 59\r
14 \r
15         WeekDay 0=Sunday,1=Monday,etc\r
16         YearDay 1=Jan 1st, 2=Jan 2nd, etc\r
17 \r
18 */\r
19 \r
20 class DateTime\r
21 {\r
22 public:\r
23         DateTime();\r
24         DateTime(const time_t &timet);\r
25         DateTime(const struct tm *stm);\r
26         ~DateTime() {}\r
27 \r
28         void Add(const int seconds=0, const int minutes=0, const int hours=0, const int days=0, const int months=0, const int years=0);\r
29         \r
30         void Set(const int year=1970, const int month=1, const int day=1, const int hour=0, const int minute=0, const int second=0);\r
31         void Set(const time_t &timet);\r
32         void Set(const struct tm *stm);\r
33         void Set(const std::string &datestring);        // method only will work with a select few basic input formats\r
34         \r
35         void SetToLocalTime();\r
36         void SetToGMTime();\r
37         \r
38         const int GetYear() const                       { return m_tm.tm_year+1900; }\r
39         void SetYear(const int year)            { m_tm.tm_year=year-1900; }\r
40         const int GetMonth() const                      { return m_tm.tm_mon+1; }\r
41         void SetMonth(const int month)          { m_tm.tm_mon=month-1; }\r
42         const int GetDay() const                        { return m_tm.tm_mday; }\r
43         void SetDay(const int day)                      { m_tm.tm_mday=day; }\r
44         const int GetWeekDay() const            { return m_tm.tm_wday; }\r
45         void SetWeekDay(const int weekday)      { m_tm.tm_wday=weekday; }\r
46         const int GetYearDay() const            { return m_tm.tm_yday+1; }\r
47         void SetYearDay(const int yearday)      { m_tm.tm_yday=yearday-1; }\r
48         const int GetHour() const                       { return m_tm.tm_hour; }\r
49         void SetHour(const int hour)            { m_tm.tm_hour=hour; }\r
50         const int GetMinute() const                     { return m_tm.tm_min; }\r
51         void SetMinute(const int minute)        { m_tm.tm_min=minute; }\r
52         const int GetSecond() const                     { return m_tm.tm_sec; }\r
53         void SetSecond(const int second)        { m_tm.tm_sec=second; }\r
54         const int GetIsDaylightTime() const     { return m_tm.tm_isdst; }\r
55         void SetIsDaylightTime(const int daylighttime) { m_tm.tm_isdst=daylighttime; }\r
56 \r
57         void Normalize();                       // normalizes any date changes that were made\r
58         \r
59         std::string Format(const std::string &formatstring) const;\r
60 \r
61         DateTime operator+(const double &rhs);\r
62         DateTime operator+(const DateTime &rhs);\r
63         DateTime &operator+=(const double &rhs);\r
64         DateTime &operator+=(const DateTime &rhs);\r
65         DateTime operator-(const double &rhs);\r
66         DateTime operator-(const DateTime &rhs);\r
67         DateTime &operator-=(const double &rhs);\r
68         DateTime &operator-=(const DateTime &rhs);\r
69         \r
70         const bool operator==(const DateTime &rhs) const { return m_timet==rhs.m_timet; }\r
71         const bool operator==(const time_t &rhs) const { return m_timet==rhs; }\r
72         const bool operator==(const struct tm &rhs) const;\r
73         \r
74         const bool operator<(const DateTime &rhs) const { return (m_timet<rhs.m_timet); }\r
75         const bool operator<(const time_t &rhs) const { return (m_timet<rhs); }\r
76         \r
77         const bool operator<=(const DateTime &rhs) const { return (*this<rhs || *this==rhs); }\r
78         const bool operator<=(const time_t &rhs) const { return (m_timet<=rhs); }\r
79         \r
80         const bool operator>(const DateTime &rhs) const { return (m_timet>rhs.m_timet); }\r
81         const bool operator>(const time_t &rhs) const { return (m_timet>rhs); }\r
82         \r
83         const bool operator>=(const DateTime &rhs) const { return (*this>rhs || *this==rhs); }\r
84         const bool operator>=(const time_t &rhs) const { return (m_timet>=rhs); }\r
85         \r
86 private:\r
87 \r
88         time_t m_timet;\r
89         struct tm m_tm;\r
90 };\r
91 \r
92 #endif  // _date_time_\r