-/* $Id$ */
#ifndef MSP_TIME_DATETIME_H_
#define MSP_TIME_DATETIME_H_
#include <string>
-#include "types.h"
+#include "timezone.h"
+#include "rawtime.h"
namespace Msp {
namespace Time {
*/
class DateTime
{
+private:
+ int year;
+ unsigned char month;
+ unsigned char mday;
+ unsigned char hour;
+ unsigned char minute;
+ unsigned char second;
+ unsigned usec;
+ TimeZone zone;
+
public:
DateTime(const TimeStamp &);
+ DateTime(const TimeStamp &, const TimeZone &);
DateTime(int, unsigned char, unsigned char);
DateTime(int, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char);
DateTime(int, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned);
-
- int get_year() const { return year; }
- unsigned char get_month() const { return month; }
- unsigned char get_mday() const { return mday; }
- unsigned char get_hour() const { return hour; }
+private:
+ void init(const TimeStamp &);
+ void init(int, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned);
+
+public:
+ int get_year() const { return year; }
+ unsigned char get_month() const { return month; }
+ unsigned char get_mday() const { return mday; }
+ unsigned char get_hour() const { return hour; }
unsigned char get_minute() const { return minute; }
unsigned char get_second() const { return second; }
- unsigned get_usec() const { return usec; }
+ unsigned get_usec() const { return usec; }
void add_days(int);
+ void set_timezone(const TimeZone &);
+ void convert_timezone(const TimeZone &);
DateTime operator+(const TimeDelta &) const;
DateTime &operator+=(const TimeDelta &);
+ DateTime operator-(const TimeDelta &) const;
+ DateTime &operator-=(const TimeDelta &);
bool operator==(const DateTime &d) const { return cmp(d)==0; }
bool operator!=(const DateTime &d) const { return cmp(d)!=0; }
int cmp(const DateTime &) const;
TimeStamp get_timestamp() const;
std::string format(const std::string &) const;
-private:
- int year;
- unsigned char month;
- unsigned char mday;
- unsigned char hour;
- unsigned char minute;
- unsigned char second;
- unsigned usec;
+ std::string format_rfc3339() const;
+private:
void add_raw(RawTime);
void normalize();
- void validate() const;
};
+inline void operator<<(LexicalConverter &c, const DateTime &d)
+{ c.result(d.format_rfc3339()); }
+
} // namespace Time
} // namespace Msp