00001
00002
00003 #ifndef ARCLIB_TIME
00004 #define ARCLIB_TIME
00005
00006 #include <stdint.h>
00007 #include <sigc++/slot.h>
00008
00009 #include <ctime>
00010 #include <iostream>
00011 #include <string>
00012
00013 namespace Arc {
00014
00016 enum TimeFormat {
00017 MDSTime,
00018 ASCTime,
00019 UserTime,
00020 ISOTime,
00021 UTCTime,
00022 RFC1123Time,
00023 EpochTime
00024 };
00025
00026 enum PeriodBase {
00027 PeriodNanoseconds,
00028 PeriodMicroseconds,
00029 PeriodMiliseconds,
00030 PeriodSeconds,
00031 PeriodMinutes,
00032 PeriodHours,
00033 PeriodDays,
00034 PeriodWeeks
00035 };
00036
00037 class Period {
00038 public:
00040 Period();
00041
00043 Period(time_t);
00044
00046 Period(time_t seconds, uint32_t nanoseconds);
00047
00049 Period(const std::string&, PeriodBase base = PeriodSeconds);
00050
00052 Period& operator=(time_t);
00053
00055 Period& operator=(const Period&);
00056
00058 void SetPeriod(time_t);
00059 void SetPeriod(time_t sec, uint32_t nanosec);
00060
00062 time_t GetPeriod() const;
00063 time_t GetPeriodNanoseconds() const;
00064
00066 const sigc::slot<const char*>* istr() const;
00067
00069 operator std::string() const;
00070
00072 bool operator<(const Period&) const;
00073
00075 bool operator>(const Period&) const;
00076
00078 bool operator<=(const Period&) const;
00079
00081 bool operator>=(const Period&) const;
00082
00084 bool operator==(const Period&) const;
00085
00087 bool operator!=(const Period&) const;
00088
00089 private:
00091 time_t seconds;
00092 uint32_t nanoseconds;
00093
00095 const char* IStr() const;
00096 sigc::slot<const char*> slot;
00097 std::string is;
00098 };
00099
00101 std::ostream& operator<<(std::ostream&, const Period&);
00102
00103
00104
00106 class Time {
00107 public:
00109 Time();
00110
00112 Time(time_t);
00113
00115 Time(time_t time, uint32_t nanosec);
00116
00118 Time(const std::string&);
00119
00121 Time& operator=(time_t);
00122
00124 Time& operator=(const Time&);
00125
00127 Time& operator=(const char*);
00128
00130 Time& operator=(const std::string&);
00131
00133 void SetTime(time_t);
00134
00136 void SetTime(time_t time, uint32_t nanosec);
00137
00139 time_t GetTime() const;
00140 time_t GetTimeNanosec() const;
00141
00144 operator std::string() const;
00145
00148 std::string str(const TimeFormat& = time_format) const;
00149
00151 static void SetFormat(const TimeFormat&);
00152
00154 static TimeFormat GetFormat();
00155
00157 bool operator<(const Time&) const;
00158
00160 bool operator>(const Time&) const;
00161
00163 bool operator<=(const Time&) const;
00164
00166 bool operator>=(const Time&) const;
00167
00169 bool operator==(const Time&) const;
00170
00172 bool operator!=(const Time&) const;
00173
00175 Time operator+(const Period&) const;
00176
00178 Time operator-(const Period&) const;
00179
00181 Period operator-(const Time&) const;
00182
00183 static const int YEAR = 31536000;
00184 static const int MONTH = 2592000;
00185 static const int WEEK = 604800;
00186 static const int DAY = 86400;
00187 static const int HOUR = 3600;
00188 static const time_t UNDEFINED = (time_t)(-1);
00189
00190 private:
00192 time_t gtime;
00193
00195 uint32_t gnano;
00196
00198 static TimeFormat time_format;
00199 };
00200
00202 std::ostream& operator<<(std::ostream&, const Time&);
00203
00205 std::string TimeStamp(const TimeFormat& = Time::GetFormat());
00206
00208 std::string TimeStamp(Time, const TimeFormat& = Time::GetFormat());
00209
00210 }
00211
00212 #endif // ARCLIB_TIME