/* */ #ifndef D_TIME_H #define D_TIME_H #include "common.h" #include #include #include "a2time.h" namespace aria2 { class Time { private: struct timeval tv_; bool good_; struct timeval getCurrentTime() const; public: // The time value is initialized so that it represents the time at which // this object was created. Time(); Time(const Time& time); Time(time_t sec); Time(const struct timeval& tv); ~Time(); Time& operator=(const Time& time); bool operator<(const Time& time) const; // Makes this object's time value up to date. void reset(); bool elapsed(time_t sec) const; bool elapsedInMillis(int64_t millis) const; time_t difference() const; time_t difference(const struct timeval& now) const; time_t difference(const Time& now) const { return difference(now.tv_); } int64_t differenceInMillis() const; int64_t differenceInMillis(const struct timeval& now) const; int64_t differenceInMillis(const Time& now) const { return differenceInMillis(now.tv_); } // Returns true if this object's time value is zero. bool isZero() const; int64_t getTimeInMicros() const; int64_t getTimeInMillis() const; // Returns this object's time value in seconds. time_t getTime() const; void setTimeInSec(time_t sec); bool isNewer(const Time& time) const; void advance(time_t sec); bool good() const; // Returns !good() bool bad() const; std::string toHTTPDate() const; // Currently timezone is assumed as GMT. static Time parse(const std::string& datetime, const std::string& format); // Currently timezone is assumed to GMT. static Time parseRFC1123(const std::string& datetime); // Currently timezone is assumed to GMT. static Time parseRFC850(const std::string& datetime); // Currently timezone is assumed to GMT. Basically the format is // RFC850, but year part is 4digit, eg 2008 This format appears in // original Netscape's PERSISTENT CLIENT STATE HTTP COOKIES // Specification. http://curl.haxx.se/rfc/cookie_spec.html static Time parseRFC850Ext(const std::string& datetime); // Currently timezone is assumed to GMT. // ANSI C's asctime() format static Time parseAsctime(const std::string& datetime); // Try parseRFC1123, parseRFC850, parseAsctime, parseRFC850Ext in // that order and returns the first "good" Time object returned by // these functions. static Time parseHTTPDate(const std::string& datetime); static Time null(); }; } // namespace aria2 #endif // D_TIME_H