]> git.tdb.fi Git - libs/core.git/blob - source/time/datetime.h
Fix an integer rounding error in Profiler
[libs/core.git] / source / time / datetime.h
1 /* $Id$ */
2 #ifndef MSP_TIME_DATETIME_H_
3 #define MSP_TIME_DATETIME_H_
4
5 #include <stdint.h>
6 #include <string>
7
8 namespace Msp {
9 namespace Time {
10
11 class TimeDelta;
12 class TimeStamp;
13
14 /**
15 Provides handling of arbitary dates and times.  Can represent a moment of time
16 in the range of about ±2.1×10⁹ years.  It can also be formatted into a string
17 for presentation to the user.
18
19 Due to the complex internal representation, arithmetic operations on a DateTime
20 are relatively slow.  For purposes of internal scheduling in a program, a
21 TimeStamp is a better choice.
22 */
23 class DateTime
24 {
25 public:
26         DateTime(const TimeStamp &);
27         DateTime(int32_t, uint8_t, uint8_t);
28         DateTime(int32_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t);
29         DateTime(int32_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint32_t);
30         
31         int32_t  get_year() const   { return year; }
32         uint8_t  get_month() const  { return month; }
33         uint8_t  get_mday() const   { return mday; }
34         uint8_t  get_hour() const   { return hour; }
35         uint8_t  get_minute() const { return minute; }
36         uint8_t  get_second() const { return second; }
37         uint32_t get_usec() const   { return usec; }
38
39         void add_days(int32_t);
40
41         DateTime operator+(const TimeDelta &) const;
42         DateTime &operator+=(const TimeDelta &);
43
44         bool operator==(const DateTime &d) const { return cmp(d)==0; }
45         bool operator!=(const DateTime &d) const { return cmp(d)!=0; }
46         bool operator<(const DateTime &d) const { return cmp(d)<0; }
47         bool operator<=(const DateTime &d) const { return cmp(d)<=0; }
48         bool operator>(const DateTime &d) const { return cmp(d)>0; }
49         bool operator>=(const DateTime &d) const { return cmp(d)>=0; }
50
51         int cmp(const DateTime &) const;
52         TimeStamp get_timestamp() const;
53         std::string format(const std::string &) const;
54 private:
55         int32_t year;
56         uint8_t month;
57         uint8_t mday;
58         uint8_t hour;
59         uint8_t minute;
60         uint8_t second;
61         uint32_t usec;
62
63         void add_raw(int64_t);
64         void normalize();
65 };
66
67 } // namespace Time
68 } // namespace Msp
69
70 #endif