1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #ifndef _RAR_TIMEFN_
- #define _RAR_TIMEFN_
- struct RarLocalTime
- {
- uint Year;
- uint Month;
- uint Day;
- uint Hour;
- uint Minute;
- uint Second;
- uint Reminder; // Part of time smaller than 1 second, represented in 1/REMINDER_PRECISION intervals.
- uint wDay;
- uint yDay;
- };
- class RarTime
- {
- private:
- static const uint TICKS_PER_SECOND = 1000000000; // Internal precision.
- // Internal time representation in 1/TICKS_PER_SECOND since 01.01.1601.
- // We use nanoseconds here to handle the high precision Unix time.
- uint64 itime;
- public:
- // RarLocalTime::Reminder precision. Must be equal to TICKS_PER_SECOND.
- // Unlike TICKS_PER_SECOND, it is a public field.
- static const uint REMINDER_PRECISION = TICKS_PER_SECOND;
- public:
- RarTime() {Reset();}
- bool operator == (RarTime &rt) {return itime==rt.itime;}
- bool operator != (RarTime &rt) {return itime!=rt.itime;}
- bool operator < (RarTime &rt) {return itime<rt.itime;}
- bool operator <= (RarTime &rt) {return itime<rt.itime || itime==rt.itime;}
- bool operator > (RarTime &rt) {return itime>rt.itime;}
- bool operator >= (RarTime &rt) {return itime>rt.itime || itime==rt.itime;}
- void GetLocal(RarLocalTime *lt);
- void SetLocal(RarLocalTime *lt);
- #ifdef _WIN_ALL
- void GetWinFT(FILETIME *ft);
- void SetWinFT(FILETIME *ft);
- #endif
- uint64 GetWin();
- void SetWin(uint64 WinTime);
- time_t GetUnix();
- void SetUnix(time_t ut);
- uint64 GetUnixNS();
- void SetUnixNS(uint64 ns);
- uint GetDos();
- void SetDos(uint DosTime);
- void GetText(wchar *DateStr,size_t MaxSize,bool FullMS);
- void SetIsoText(const wchar *TimeText);
- void SetAgeText(const wchar *TimeText);
- void SetCurrentTime();
- void Reset() {itime=0;}
- bool IsSet() {return itime!=0;}
- void Adjust(int64 ns);
- };
- const wchar *GetMonthName(int Month);
- bool IsLeapYear(int Year);
- #endif
|