| // Copyright 2014 PDFium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
| #ifndef _FX_DATETIME_H_ | |
| #define _FX_DATETIME_H_ | |
| class CFX_Unitime; | |
| class CFX_DateTime; | |
| typedef int64_t FX_UNITIME; | |
| enum FX_WEEKDAY { | |
| FX_Sunday = 0, | |
| FX_Monday , | |
| FX_Tuesday , | |
| FX_Wednesday , | |
| FX_Thursday , | |
| FX_Friday , | |
| FX_Saturday , | |
| }; | |
| FX_BOOL FX_IsLeapYear(int32_t iYear); | |
| int32_t FX_DaysInYear(int32_t iYear); | |
| uint8_t FX_DaysInMonth(int32_t iYear, uint8_t iMonth); | |
| class CFX_Unitime | |
| { | |
| public: | |
| CFX_Unitime() | |
| { | |
| m_iUnitime = 0; | |
| } | |
| CFX_Unitime(FX_UNITIME iUnitime) | |
| { | |
| m_iUnitime = iUnitime; | |
| } | |
| CFX_Unitime(const CFX_Unitime &unitime) | |
| { | |
| m_iUnitime = unitime.m_iUnitime; | |
| } | |
| operator FX_UNITIME * () | |
| { | |
| return &m_iUnitime; | |
| } | |
| operator FX_UNITIME const * () const | |
| { | |
| return &m_iUnitime; | |
| } | |
| operator FX_UNITIME& () | |
| { | |
| return m_iUnitime; | |
| } | |
| operator const FX_UNITIME& () const | |
| { | |
| return m_iUnitime; | |
| } | |
| CFX_Unitime& operator = (const CFX_Unitime &t) | |
| { | |
| m_iUnitime = t.m_iUnitime; | |
| return *this; | |
| } | |
| CFX_Unitime& operator = (FX_UNITIME t) | |
| { | |
| m_iUnitime = t; | |
| return *this; | |
| } | |
| CFX_Unitime& operator += (const CFX_Unitime &t) | |
| { | |
| m_iUnitime += t.m_iUnitime; | |
| return *this; | |
| } | |
| CFX_Unitime& operator += (FX_UNITIME t) | |
| { | |
| m_iUnitime += t; | |
| return *this; | |
| } | |
| CFX_Unitime& operator -= (const CFX_Unitime &t) | |
| { | |
| m_iUnitime -= t.m_iUnitime; | |
| return *this; | |
| } | |
| CFX_Unitime& operator -= (FX_UNITIME t) | |
| { | |
| m_iUnitime -= t; | |
| return *this; | |
| } | |
| void Now(); | |
| void SetGMTime(); | |
| void Set(int32_t year, uint8_t month, uint8_t day, uint8_t hour = 0, uint8_t minute = 0, uint8_t second = 0, FX_WORD millisecond = 0); | |
| void Set(FX_UNITIME t); | |
| int32_t GetYear() const; | |
| uint8_t GetMonth() const; | |
| uint8_t GetDay() const; | |
| FX_WEEKDAY GetDayOfWeek() const; | |
| FX_WORD GetDayOfYear() const; | |
| int64_t GetDayOfAD() const; | |
| uint8_t GetHour() const; | |
| uint8_t GetMinute() const; | |
| uint8_t GetSecond() const; | |
| FX_WORD GetMillisecond() const; | |
| FX_BOOL AddYears(int32_t iYears); | |
| FX_BOOL AddMonths(int32_t iMonths); | |
| FX_BOOL AddDays(int32_t iDays); | |
| FX_BOOL AddHours(int32_t iHours); | |
| FX_BOOL AddMinutes(int32_t iMinutes); | |
| FX_BOOL AddSeconds(int32_t iSeconds); | |
| FX_BOOL AddMilliseconds(int32_t iMilliseconds); | |
| friend CFX_Unitime operator + (const CFX_Unitime &t1, const CFX_Unitime &t2) | |
| { | |
| return CFX_Unitime(t1.m_iUnitime + t2.m_iUnitime); | |
| } | |
| friend CFX_Unitime operator + (const CFX_Unitime &t1, FX_UNITIME t2) | |
| { | |
| return CFX_Unitime(t1.m_iUnitime + t2); | |
| } | |
| friend CFX_Unitime operator + (FX_UNITIME t1, const CFX_Unitime &t2) | |
| { | |
| return CFX_Unitime(t1 + t2.m_iUnitime); | |
| } | |
| friend CFX_Unitime operator - (const CFX_Unitime &t1, const CFX_Unitime &t2) | |
| { | |
| return CFX_Unitime(t1.m_iUnitime + t2.m_iUnitime); | |
| } | |
| friend CFX_Unitime operator - (const CFX_Unitime &t1, FX_UNITIME t2) | |
| { | |
| return CFX_Unitime(t1.m_iUnitime + t2); | |
| } | |
| friend CFX_Unitime operator - (FX_UNITIME t1, const CFX_Unitime &t2) | |
| { | |
| return CFX_Unitime(t1 + t2.m_iUnitime); | |
| } | |
| friend FX_BOOL operator == (const CFX_Unitime &t1, const CFX_Unitime &t2) | |
| { | |
| return t1.m_iUnitime == t2.m_iUnitime; | |
| } | |
| friend FX_BOOL operator == (const CFX_Unitime &t1, FX_UNITIME t2) | |
| { | |
| return t1.m_iUnitime == t2; | |
| } | |
| friend FX_BOOL operator == (FX_UNITIME t1, const CFX_Unitime &t2) | |
| { | |
| return t1 == t2.m_iUnitime; | |
| } | |
| friend FX_BOOL operator != (const CFX_Unitime &t1, const CFX_Unitime &t2) | |
| { | |
| return t1.m_iUnitime != t2.m_iUnitime; | |
| } | |
| friend FX_BOOL operator != (const CFX_Unitime &t1, FX_UNITIME t2) | |
| { | |
| return t1.m_iUnitime != t2; | |
| } | |
| friend FX_BOOL operator != (FX_UNITIME t1, const CFX_Unitime &t2) | |
| { | |
| return t1 != t2.m_iUnitime; | |
| } | |
| friend FX_BOOL operator > (const CFX_Unitime &t1, const CFX_Unitime &t2) | |
| { | |
| return t1.m_iUnitime > t2.m_iUnitime; | |
| } | |
| friend FX_BOOL operator > (const CFX_Unitime &t1, FX_UNITIME t2) | |
| { | |
| return t1.m_iUnitime > t2; | |
| } | |
| friend FX_BOOL operator > (FX_UNITIME t1, const CFX_Unitime &t2) | |
| { | |
| return t1 > t2.m_iUnitime; | |
| } | |
| friend FX_BOOL operator >= (const CFX_Unitime &t1, const CFX_Unitime &t2) | |
| { | |
| return t1.m_iUnitime >= t2.m_iUnitime; | |
| } | |
| friend FX_BOOL operator >= (const CFX_Unitime &t1, FX_UNITIME t2) | |
| { | |
| return t1.m_iUnitime >= t2; | |
| } | |
| friend FX_BOOL operator >= (FX_UNITIME t1, const CFX_Unitime &t2) | |
| { | |
| return t1 >= t2.m_iUnitime; | |
| } | |
| friend FX_BOOL operator < (const CFX_Unitime &t1, const CFX_Unitime &t2) | |
| { | |
| return t1.m_iUnitime < t2.m_iUnitime; | |
| } | |
| friend FX_BOOL operator < (const CFX_Unitime &t1, FX_UNITIME t2) | |
| { | |
| return t1.m_iUnitime < t2; | |
| } | |
| friend FX_BOOL operator < (FX_UNITIME t1, const CFX_Unitime &t2) | |
| { | |
| return t1 < t2.m_iUnitime; | |
| } | |
| friend FX_BOOL operator <= (const CFX_Unitime &t1, const CFX_Unitime &t2) | |
| { | |
| return t1.m_iUnitime <= t2.m_iUnitime; | |
| } | |
| friend FX_BOOL operator <= (const CFX_Unitime &t1, FX_UNITIME t2) | |
| { | |
| return t1.m_iUnitime <= t2; | |
| } | |
| friend FX_BOOL operator <= (FX_UNITIME t1, const CFX_Unitime &t2) | |
| { | |
| return t1 <= t2.m_iUnitime; | |
| } | |
| private: | |
| FX_UNITIME m_iUnitime; | |
| }; | |
| #if _FX_OS_ != _FX_ANDROID_ | |
| #pragma pack(push, 1) | |
| #endif | |
| typedef struct _FX_DATE { | |
| int32_t year; | |
| uint8_t month; | |
| uint8_t day; | |
| } FX_DATE, * FX_LPDATE; | |
| typedef FX_DATE const * FX_LPCDATE; | |
| typedef struct _FX_TIME { | |
| uint8_t hour; | |
| uint8_t minute; | |
| uint8_t second; | |
| FX_WORD millisecond; | |
| } FX_TIME, * FX_LPTIME; | |
| typedef FX_TIME const * FX_LPCTIME; | |
| typedef struct _FX_TIMEZONE { | |
| int8_t tzHour; | |
| uint8_t tzMinute; | |
| } FX_TIMEZONE, * FX_LPTIMEZONE; | |
| typedef FX_TIMEZONE const * FX_LPCTIMEZONE; | |
| typedef struct _FX_DATETIME { | |
| union { | |
| struct { | |
| int32_t year; | |
| uint8_t month; | |
| uint8_t day; | |
| } sDate; | |
| FX_DATE aDate; | |
| } Date; | |
| union { | |
| struct { | |
| uint8_t hour; | |
| uint8_t minute; | |
| uint8_t second; | |
| FX_WORD millisecond; | |
| } sTime; | |
| FX_TIME aTime; | |
| } Time; | |
| } FX_DATETIME, * FX_LPDATETIME; | |
| typedef FX_DATETIME const * FX_LPCDATETIME; | |
| typedef struct _FX_DATETIMEZONE { | |
| union { | |
| struct { | |
| union { | |
| struct { | |
| int32_t year; | |
| uint8_t month; | |
| uint8_t day; | |
| }; | |
| FX_DATE date; | |
| }; | |
| union { | |
| struct { | |
| uint8_t hour; | |
| uint8_t minute; | |
| uint8_t second; | |
| FX_WORD millisecond; | |
| }; | |
| FX_TIME time; | |
| }; | |
| }; | |
| FX_DATETIME dt; | |
| }; | |
| union { | |
| struct { | |
| int8_t tzHour; | |
| uint8_t tzMinute; | |
| }; | |
| FX_TIMEZONE tz; | |
| }; | |
| } FX_DATETIMEZONE, * FX_LPDATETIMEZONE; | |
| typedef FX_DATETIMEZONE const * FX_LPCDATETIMEZONE; | |
| #if _FX_OS_ != _FX_ANDROID_ | |
| #pragma pack(pop) | |
| #endif | |
| class CFX_DateTime | |
| { | |
| public: | |
| CFX_DateTime() {} | |
| CFX_DateTime(const FX_DATETIME &dt) | |
| { | |
| m_DateTime = dt; | |
| } | |
| CFX_DateTime(const CFX_DateTime &dt) | |
| { | |
| m_DateTime = dt.m_DateTime; | |
| } | |
| virtual ~CFX_DateTime() {} | |
| operator FX_DATETIME * () | |
| { | |
| return &m_DateTime; | |
| } | |
| operator FX_DATETIME const * () const | |
| { | |
| return &m_DateTime; | |
| } | |
| operator FX_DATETIME& () | |
| { | |
| return m_DateTime; | |
| } | |
| operator const FX_DATETIME& () const | |
| { | |
| return m_DateTime; | |
| } | |
| CFX_DateTime& operator = (const CFX_DateTime &dt) | |
| { | |
| m_DateTime = dt.m_DateTime; | |
| return *this; | |
| } | |
| CFX_DateTime& operator = (const FX_DATETIME &dt) | |
| { | |
| m_DateTime = dt; | |
| return *this; | |
| } | |
| CFX_DateTime& operator += (const CFX_DateTime &dt) | |
| { | |
| FromUnitime(ToUnitime() + dt.ToUnitime()); | |
| return *this; | |
| } | |
| CFX_DateTime& operator += (const FX_DATETIME &dt) | |
| { | |
| FromUnitime(ToUnitime() + ((const CFX_DateTime&)dt).ToUnitime()); | |
| return *this; | |
| } | |
| CFX_DateTime& operator -= (const CFX_DateTime &dt) | |
| { | |
| FromUnitime(ToUnitime() - dt.ToUnitime()); | |
| return *this; | |
| } | |
| CFX_DateTime& operator -= (const FX_DATETIME &dt) | |
| { | |
| FromUnitime(ToUnitime() - ((const CFX_DateTime&)dt).ToUnitime()); | |
| return *this; | |
| } | |
| virtual FX_BOOL Set(int32_t year, uint8_t month, uint8_t day, uint8_t hour = 0, uint8_t minute = 0, uint8_t second = 0, FX_WORD millisecond = 0); | |
| virtual FX_BOOL FromUnitime(FX_UNITIME t); | |
| virtual FX_UNITIME ToUnitime() const; | |
| virtual int32_t GetYear() const; | |
| virtual uint8_t GetMonth() const; | |
| virtual uint8_t GetDay() const; | |
| virtual FX_WEEKDAY GetDayOfWeek() const; | |
| virtual FX_WORD GetDayOfYear() const; | |
| virtual int64_t GetDayOfAD() const; | |
| virtual uint8_t GetHour() const; | |
| virtual uint8_t GetMinute() const; | |
| virtual uint8_t GetSecond() const; | |
| virtual FX_WORD GetMillisecond() const; | |
| virtual FX_BOOL AddYears(int32_t iYears); | |
| virtual FX_BOOL AddMonths(int32_t iMonths); | |
| virtual FX_BOOL AddDays(int32_t iDays); | |
| virtual FX_BOOL AddHours(int32_t iHours); | |
| virtual FX_BOOL AddMinutes(int32_t iMinutes); | |
| virtual FX_BOOL AddSeconds(int32_t iSeconds); | |
| virtual FX_BOOL AddMilliseconds(int32_t iMilliseconds); | |
| friend CFX_DateTime operator + (const CFX_DateTime &dt1, const CFX_DateTime &dt2) | |
| { | |
| CFX_DateTime dt; | |
| dt.FromUnitime(dt1.ToUnitime() + dt2.ToUnitime()); | |
| return dt; | |
| } | |
| friend CFX_DateTime operator + (const CFX_DateTime &dt1, const FX_DATETIME &dt2) | |
| { | |
| CFX_DateTime dt; | |
| dt.FromUnitime(dt1.ToUnitime() + ((const CFX_DateTime&)dt2).ToUnitime()); | |
| return dt; | |
| } | |
| friend CFX_DateTime operator + (const FX_DATETIME &dt1, const CFX_DateTime &dt2) | |
| { | |
| CFX_DateTime dt; | |
| dt.FromUnitime(((const CFX_DateTime&)dt1).ToUnitime() + dt2.ToUnitime()); | |
| return dt; | |
| } | |
| friend CFX_DateTime operator - (const CFX_DateTime &dt1, const CFX_DateTime &dt2) | |
| { | |
| CFX_DateTime dt; | |
| dt.FromUnitime(dt1.ToUnitime() - dt2.ToUnitime()); | |
| return dt; | |
| } | |
| friend CFX_DateTime operator - (const CFX_DateTime &dt1, const FX_DATETIME &dt2) | |
| { | |
| CFX_DateTime dt; | |
| dt.FromUnitime(dt1.ToUnitime() - ((const CFX_DateTime&)dt2).ToUnitime()); | |
| return dt; | |
| } | |
| friend CFX_DateTime operator - (const FX_DATETIME &dt1, const CFX_DateTime &dt2) | |
| { | |
| CFX_DateTime dt; | |
| dt.FromUnitime(((const CFX_DateTime&)dt1).ToUnitime() - dt2.ToUnitime()); | |
| return dt; | |
| } | |
| friend FX_BOOL operator == (const CFX_DateTime &dt1, const CFX_DateTime &dt2) | |
| { | |
| return FXSYS_memcmp((FX_LPCDATETIME)dt1, (FX_LPCDATETIME)dt2, sizeof(FX_DATETIME)) == 0; | |
| } | |
| friend FX_BOOL operator == (const CFX_DateTime &dt1, const FX_DATETIME &dt2) | |
| { | |
| return FXSYS_memcmp((FX_LPCDATETIME)dt1, &dt2, sizeof(FX_DATETIME)) == 0; | |
| } | |
| friend FX_BOOL operator == (const FX_DATETIME &dt1, const CFX_DateTime &dt2) | |
| { | |
| return FXSYS_memcmp(&dt1, (FX_LPCDATETIME)dt2, sizeof(FX_DATETIME)) == 0; | |
| } | |
| friend FX_BOOL operator != (const CFX_DateTime &dt1, const CFX_DateTime &dt2) | |
| { | |
| return FXSYS_memcmp((FX_LPCDATETIME)dt1, (FX_LPCDATETIME)dt2, sizeof(FX_DATETIME)) != 0; | |
| } | |
| friend FX_BOOL operator != (const CFX_DateTime &dt1, const FX_DATETIME &dt2) | |
| { | |
| return FXSYS_memcmp((FX_LPCDATETIME)dt1, &dt2, sizeof(FX_DATETIME)) != 0; | |
| } | |
| friend FX_BOOL operator != (const FX_DATETIME &dt1, const CFX_DateTime &dt2) | |
| { | |
| return FXSYS_memcmp(&dt1, (FX_LPCDATETIME)dt2, sizeof(FX_DATETIME)) != 0; | |
| } | |
| friend FX_BOOL operator > (const CFX_DateTime &dt1, const CFX_DateTime &dt2) | |
| { | |
| return dt1.ToUnitime() > dt2.ToUnitime(); | |
| } | |
| friend FX_BOOL operator > (const CFX_DateTime &dt1, const FX_DATETIME &dt2) | |
| { | |
| return dt1.ToUnitime() > ((const CFX_DateTime&)dt2).ToUnitime(); | |
| } | |
| friend FX_BOOL operator > (const FX_DATETIME &dt1, const CFX_DateTime &dt2) | |
| { | |
| return ((const CFX_DateTime&)dt1).ToUnitime() > dt2.ToUnitime(); | |
| } | |
| friend FX_BOOL operator >= (const CFX_DateTime &dt1, const CFX_DateTime &dt2) | |
| { | |
| return dt1.ToUnitime() >= dt2.ToUnitime(); | |
| } | |
| friend FX_BOOL operator >= (const CFX_DateTime &dt1, const FX_DATETIME &dt2) | |
| { | |
| return dt1.ToUnitime() >= ((const CFX_DateTime&)dt2).ToUnitime(); | |
| } | |
| friend FX_BOOL operator >= (const FX_DATETIME &dt1, const CFX_DateTime &dt2) | |
| { | |
| return ((const CFX_DateTime&)dt1).ToUnitime() >= dt2.ToUnitime(); | |
| } | |
| friend FX_BOOL operator < (const CFX_DateTime &dt1, const CFX_DateTime &dt2) | |
| { | |
| return dt1.ToUnitime() < dt2.ToUnitime(); | |
| } | |
| friend FX_BOOL operator < (const CFX_DateTime &dt1, const FX_DATETIME &dt2) | |
| { | |
| return dt1.ToUnitime() < ((const CFX_DateTime&)dt2).ToUnitime(); | |
| } | |
| friend FX_BOOL operator < (const FX_DATETIME &dt1, const CFX_DateTime &dt2) | |
| { | |
| return ((const CFX_DateTime&)dt1).ToUnitime() < dt2.ToUnitime(); | |
| } | |
| friend FX_BOOL operator <= (const CFX_DateTime &dt1, const CFX_DateTime &dt2) | |
| { | |
| return dt1.ToUnitime() <= dt2.ToUnitime(); | |
| } | |
| friend FX_BOOL operator <= (const CFX_DateTime &dt1, const FX_DATETIME &dt2) | |
| { | |
| return dt1.ToUnitime() <= ((const CFX_DateTime&)dt2).ToUnitime(); | |
| } | |
| friend FX_BOOL operator <= (const FX_DATETIME &dt1, const CFX_DateTime &dt2) | |
| { | |
| return ((const CFX_DateTime&)dt1).ToUnitime() <= dt2.ToUnitime(); | |
| } | |
| private: | |
| FX_DATETIME m_DateTime; | |
| }; | |
| #endif |