mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 14:16:07 -06:00
185 lines
5.4 KiB
C++
185 lines
5.4 KiB
C++
class Nuller;
|
|
class Stream;
|
|
struct FileTime;
|
|
|
|
struct Date : RelOps< Date, Moveable<Date> > {
|
|
byte day;
|
|
byte month;
|
|
int16 year;
|
|
|
|
void Serialize(Stream& s);
|
|
|
|
bool IsValid() const;
|
|
void Set(int scalar);
|
|
int Get() const;
|
|
|
|
static Date Low() { return Date(-4000, 1, 1); }
|
|
static Date High() { return Date(4000, 1, 1); }
|
|
|
|
int Compare(Date b) const;
|
|
|
|
Date& operator++() { if(day < 28) day++; else Set(Get() + 1); return *this; }
|
|
Date& operator--() { if(day > 1) day--; else Set(Get() - 1); return *this; }
|
|
|
|
Date operator++(int) { Date d = *this; operator++(); return d; }
|
|
Date operator--(int) { Date d = *this; operator--(); return d; }
|
|
|
|
Date() { year = -32768; day = month = 0; }
|
|
Date(const Nuller&) { year = -32768; day = month = 0; }
|
|
Date(int y, int m, int d) { day = d; month = m; year = y; }
|
|
};
|
|
|
|
inline hash_t GetHashValue(Date t) {
|
|
return 512 * t.year + 32 * t.month + t.day;
|
|
}
|
|
|
|
inline bool operator==(Date a, Date b) {
|
|
return a.day == b.day && a.month == b.month && a.year == b.year;
|
|
}
|
|
|
|
template<> inline bool IsNull(const Date& d) { return d.year == -32768; }
|
|
|
|
bool operator<(Date a, Date b);
|
|
|
|
int operator-(Date a, Date b);
|
|
Date operator+(Date a, int b);
|
|
Date operator+(int a, Date b);
|
|
Date operator-(Date a, int b);
|
|
Date& operator+=(Date& a, int b);
|
|
Date& operator-=(Date& a, int b);
|
|
|
|
bool IsLeapYear(int year);
|
|
|
|
int GetDaysOfMonth(int month, int year);
|
|
|
|
int DayOfWeek(Date date);
|
|
Date LastDayOfMonth(Date d);
|
|
Date FirstDayOfMonth(Date d);
|
|
Date LastDayOfYear(Date d);
|
|
Date FirstDayOfYear(Date d);
|
|
int DayOfYear(Date d);
|
|
|
|
Date AddMonths(Date date, int months);
|
|
int GetMonths(Date since, Date till);
|
|
int GetMonthsP(Date since, Date till);
|
|
Date AddYears(Date date, int years);
|
|
|
|
Date GetWeekDate(int year, int week);
|
|
int GetWeek(Date d, int& year);
|
|
|
|
Date EasterDay(int year);
|
|
|
|
Date GetSysDate();
|
|
|
|
String DayName(int i, int lang = 0);
|
|
String DyName(int i, int lang = 0);
|
|
String MonthName(int i, int lang = 0);
|
|
String MonName(int i, int lang = 0);
|
|
|
|
void SetDateFormat(const char *fmt);
|
|
void SetDateScan(const char *scan);
|
|
void SetDateFilter(const char *seps);
|
|
|
|
#ifdef PLATFORM_WIN32 // resolve nameclash with win32 API
|
|
#ifdef GetDateFormatA
|
|
#undef GetDateFormatA
|
|
#endif
|
|
|
|
#ifdef GetDateFormatW
|
|
#undef GetDateFormatW
|
|
#endif
|
|
#endif
|
|
|
|
String GetDateFormat();
|
|
|
|
const char *StrToDate(const char *fmt, Date& d, const char *s, Date def = Null);
|
|
const char *StrToDate(Date& d, const char *s, Date def);
|
|
const char *StrToDate(Date& d, const char *s);
|
|
Date ScanDate(const char *fmt, const char *s, Date def = Null);
|
|
Date ScanDate(const char *s, Date def = Null);
|
|
String Format(Date date, const char *fmt);
|
|
String Format(Date date);
|
|
int CharFilterDate(int c);
|
|
|
|
template<>
|
|
inline String AsString(const Date& date) { return Format(date); }
|
|
|
|
struct Time : Date, RelOps< Time, Moveable<Time> > {
|
|
byte hour;
|
|
byte minute;
|
|
byte second;
|
|
|
|
void Serialize(Stream& s);
|
|
|
|
static Time High() { return Time(4000, 1, 1); }
|
|
static Time Low() { return Time(-4000, 1, 1); }
|
|
|
|
void Set(int64 scalar);
|
|
int64 Get() const;
|
|
|
|
bool IsValid() const;
|
|
|
|
int Compare(Time b) const;
|
|
|
|
Time() { hour = minute = second = 0; }
|
|
Time(const Nuller&) { hour = minute = second = 0; }
|
|
Time(int y, int m, int d, int h = 0, int n = 0, int s = 0)
|
|
{ day = d; month = m; year = y; hour = h; minute = n; second = s; }
|
|
|
|
Time(FileTime filetime);
|
|
FileTime AsFileTime() const;
|
|
};
|
|
|
|
inline Time ToTime(const Date& d) {
|
|
return Time(d.year, d.month, d.day);
|
|
}
|
|
|
|
inline hash_t GetHashValue(Time t) {
|
|
return t.second +
|
|
32 * (t.minute + 32 * (t.hour + 16 * (t.day + 32 * (t.month + 8 * t.year))));
|
|
}
|
|
|
|
template<> inline bool IsNull(const Time& t) { return t.year == -32768; }
|
|
|
|
bool operator==(Time a, Time b);
|
|
bool operator<(Time a, Time b);
|
|
|
|
int64 operator-(Time a, Time b);
|
|
Time operator+(Time a, int64 seconds);
|
|
Time operator+(int64 seconds, Time a);
|
|
Time operator-(Time a, int64 secs);
|
|
Time& operator+=(Time& a, int64 secs);
|
|
Time& operator-=(Time& a, int64 secs);
|
|
|
|
inline Time operator+(Time a, int i) { return a + int64(i); }
|
|
inline Time operator-(Time a, int i) { return a - int64(i); }
|
|
inline Time& operator+=(Time& a, int i) { return a += int64(i); }
|
|
inline Time& operator-=(Time& a, int i) { return a -= int64(i); }
|
|
|
|
inline Time operator+(Time a, double i) { return a + int64(i); }
|
|
inline Time operator-(Time a, double i) { return a - int64(i); }
|
|
inline Time& operator+=(Time& a, double i) { return a += int64(i); }
|
|
inline Time& operator-=(Time& a, double i) { return a -= int64(i); }
|
|
|
|
Time GetSysTime();
|
|
Time GetUtcTime();
|
|
|
|
String Format(Time time, bool seconds = true);
|
|
const char *StrToTime(const char *datefmt, Time& d, const char *s);
|
|
const char *StrToTime(Time& d, const char *s);
|
|
Time ScanTime(const char *datefmt, const char *s, Time def = Null);
|
|
Time ScanTime(const char *s, Time def = Null);
|
|
|
|
template<>
|
|
inline String AsString(const Time& time) { return Format(time); }
|
|
|
|
bool SetSysTime(Time time); // only root/sysadmin can do this...
|
|
|
|
int GetTimeZone();
|
|
String GetTimeZoneText();
|
|
int ScanTimeZoneText(const char *s);
|
|
int ScanTimeZone(const char *s);
|
|
|
|
int GetLeapSeconds(Date dt);
|
|
int64 GetUTCSeconds(Time tm);
|
|
Time TimeFromUTC(int64 seconds);
|