1 // Copyright 2014 PDFium Authors. All rights reserved.
\r
2 // Use of this source code is governed by a BSD-style license that can be
\r
3 // found in the LICENSE file.
\r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
\r
7 #ifndef _FX_DATETIME_H_
\r
8 #define _FX_DATETIME_H_
\r
11 typedef FX_INT64 FX_UNITIME;
\r
21 FX_BOOL FX_IsLeapYear(FX_INT32 iYear);
\r
22 FX_INT32 FX_DaysInYear(FX_INT32 iYear);
\r
23 FX_BYTE FX_DaysInMonth(FX_INT32 iYear, FX_BYTE iMonth);
\r
24 class CFX_Unitime : public CFX_Object
\r
31 CFX_Unitime(FX_UNITIME iUnitime)
\r
33 m_iUnitime = iUnitime;
\r
35 CFX_Unitime(const CFX_Unitime &unitime)
\r
37 m_iUnitime = unitime.m_iUnitime;
\r
39 operator FX_UNITIME * ()
\r
43 operator FX_UNITIME const * () const
\r
47 operator FX_UNITIME& ()
\r
51 operator const FX_UNITIME& () const
\r
55 CFX_Unitime& operator = (const CFX_Unitime &t)
\r
57 m_iUnitime = t.m_iUnitime;
\r
60 CFX_Unitime& operator = (FX_UNITIME t)
\r
65 CFX_Unitime& operator += (const CFX_Unitime &t)
\r
67 m_iUnitime += t.m_iUnitime;
\r
70 CFX_Unitime& operator += (FX_UNITIME t)
\r
75 CFX_Unitime& operator -= (const CFX_Unitime &t)
\r
77 m_iUnitime -= t.m_iUnitime;
\r
80 CFX_Unitime& operator -= (FX_UNITIME t)
\r
87 void Set(FX_INT32 year, FX_BYTE month, FX_BYTE day, FX_BYTE hour = 0, FX_BYTE minute = 0, FX_BYTE second = 0, FX_WORD millisecond = 0);
\r
88 void Set(FX_UNITIME t);
\r
89 FX_INT32 GetYear() const;
\r
90 FX_BYTE GetMonth() const;
\r
91 FX_BYTE GetDay() const;
\r
92 FX_WEEKDAY GetDayOfWeek() const;
\r
93 FX_WORD GetDayOfYear() const;
\r
94 FX_INT64 GetDayOfAD() const;
\r
95 FX_BYTE GetHour() const;
\r
96 FX_BYTE GetMinute() const;
\r
97 FX_BYTE GetSecond() const;
\r
98 FX_WORD GetMillisecond() const;
\r
99 FX_BOOL AddYears(FX_INT32 iYears);
\r
100 FX_BOOL AddMonths(FX_INT32 iMonths);
\r
101 FX_BOOL AddDays(FX_INT32 iDays);
\r
102 FX_BOOL AddHours(FX_INT32 iHours);
\r
103 FX_BOOL AddMinutes(FX_INT32 iMinutes);
\r
104 FX_BOOL AddSeconds(FX_INT32 iSeconds);
\r
105 FX_BOOL AddMilliseconds(FX_INT32 iMilliseconds);
\r
106 friend CFX_Unitime operator + (const CFX_Unitime &t1, const CFX_Unitime &t2)
\r
108 return CFX_Unitime(t1.m_iUnitime + t2.m_iUnitime);
\r
110 friend CFX_Unitime operator + (const CFX_Unitime &t1, FX_UNITIME t2)
\r
112 return CFX_Unitime(t1.m_iUnitime + t2);
\r
114 friend CFX_Unitime operator + (FX_UNITIME t1, const CFX_Unitime &t2)
\r
116 return CFX_Unitime(t1 + t2.m_iUnitime);
\r
118 friend CFX_Unitime operator - (const CFX_Unitime &t1, const CFX_Unitime &t2)
\r
120 return CFX_Unitime(t1.m_iUnitime + t2.m_iUnitime);
\r
122 friend CFX_Unitime operator - (const CFX_Unitime &t1, FX_UNITIME t2)
\r
124 return CFX_Unitime(t1.m_iUnitime + t2);
\r
126 friend CFX_Unitime operator - (FX_UNITIME t1, const CFX_Unitime &t2)
\r
128 return CFX_Unitime(t1 + t2.m_iUnitime);
\r
130 friend FX_BOOL operator == (const CFX_Unitime &t1, const CFX_Unitime &t2)
\r
132 return t1.m_iUnitime == t2.m_iUnitime;
\r
134 friend FX_BOOL operator == (const CFX_Unitime &t1, FX_UNITIME t2)
\r
136 return t1.m_iUnitime == t2;
\r
138 friend FX_BOOL operator == (FX_UNITIME t1, const CFX_Unitime &t2)
\r
140 return t1 == t2.m_iUnitime;
\r
142 friend FX_BOOL operator != (const CFX_Unitime &t1, const CFX_Unitime &t2)
\r
144 return t1.m_iUnitime != t2.m_iUnitime;
\r
146 friend FX_BOOL operator != (const CFX_Unitime &t1, FX_UNITIME t2)
\r
148 return t1.m_iUnitime != t2;
\r
150 friend FX_BOOL operator != (FX_UNITIME t1, const CFX_Unitime &t2)
\r
152 return t1 != t2.m_iUnitime;
\r
154 friend FX_BOOL operator > (const CFX_Unitime &t1, const CFX_Unitime &t2)
\r
156 return t1.m_iUnitime > t2.m_iUnitime;
\r
158 friend FX_BOOL operator > (const CFX_Unitime &t1, FX_UNITIME t2)
\r
160 return t1.m_iUnitime > t2;
\r
162 friend FX_BOOL operator > (FX_UNITIME t1, const CFX_Unitime &t2)
\r
164 return t1 > t2.m_iUnitime;
\r
166 friend FX_BOOL operator >= (const CFX_Unitime &t1, const CFX_Unitime &t2)
\r
168 return t1.m_iUnitime >= t2.m_iUnitime;
\r
170 friend FX_BOOL operator >= (const CFX_Unitime &t1, FX_UNITIME t2)
\r
172 return t1.m_iUnitime >= t2;
\r
174 friend FX_BOOL operator >= (FX_UNITIME t1, const CFX_Unitime &t2)
\r
176 return t1 >= t2.m_iUnitime;
\r
178 friend FX_BOOL operator < (const CFX_Unitime &t1, const CFX_Unitime &t2)
\r
180 return t1.m_iUnitime < t2.m_iUnitime;
\r
182 friend FX_BOOL operator < (const CFX_Unitime &t1, FX_UNITIME t2)
\r
184 return t1.m_iUnitime < t2;
\r
186 friend FX_BOOL operator < (FX_UNITIME t1, const CFX_Unitime &t2)
\r
188 return t1 < t2.m_iUnitime;
\r
190 friend FX_BOOL operator <= (const CFX_Unitime &t1, const CFX_Unitime &t2)
\r
192 return t1.m_iUnitime <= t2.m_iUnitime;
\r
194 friend FX_BOOL operator <= (const CFX_Unitime &t1, FX_UNITIME t2)
\r
196 return t1.m_iUnitime <= t2;
\r
198 friend FX_BOOL operator <= (FX_UNITIME t1, const CFX_Unitime &t2)
\r
200 return t1 <= t2.m_iUnitime;
\r
203 FX_UNITIME m_iUnitime;
\r
205 #if _FX_OS_ != _FX_ANDROID_
\r
206 #pragma pack(push, 1)
\r
208 typedef struct _FX_DATE {
\r
212 } FX_DATE, * FX_LPDATE;
\r
213 typedef FX_DATE const * FX_LPCDATE;
\r
214 typedef struct _FX_TIME {
\r
218 FX_WORD millisecond;
\r
219 } FX_TIME, * FX_LPTIME;
\r
220 typedef FX_TIME const * FX_LPCTIME;
\r
221 typedef struct _FX_TIMEZONE {
\r
224 } FX_TIMEZONE, * FX_LPTIMEZONE;
\r
225 typedef FX_TIMEZONE const * FX_LPCTIMEZONE;
\r
226 typedef struct _FX_DATETIME {
\r
240 FX_WORD millisecond;
\r
244 } FX_DATETIME, * FX_LPDATETIME;
\r
245 typedef FX_DATETIME const * FX_LPCDATETIME;
\r
246 typedef struct _FX_DATETIMEZONE {
\r
262 FX_WORD millisecond;
\r
276 } FX_DATETIMEZONE, * FX_LPDATETIMEZONE;
\r
277 typedef FX_DATETIMEZONE const * FX_LPCDATETIMEZONE;
\r
278 #if _FX_OS_ != _FX_ANDROID_
\r
281 class CFX_DateTime : public CFX_Object
\r
285 CFX_DateTime(const FX_DATETIME &dt)
\r
289 CFX_DateTime(const CFX_DateTime &dt)
\r
291 m_DateTime = dt.m_DateTime;
\r
293 operator FX_DATETIME * ()
\r
295 return &m_DateTime;
\r
297 operator FX_DATETIME const * () const
\r
299 return &m_DateTime;
\r
301 operator FX_DATETIME& ()
\r
305 operator const FX_DATETIME& () const
\r
309 CFX_DateTime& operator = (const CFX_DateTime &dt)
\r
311 m_DateTime = dt.m_DateTime;
\r
314 CFX_DateTime& operator = (const FX_DATETIME &dt)
\r
319 CFX_DateTime& operator += (const CFX_DateTime &dt)
\r
321 FromUnitime(ToUnitime() + dt.ToUnitime());
\r
324 CFX_DateTime& operator += (const FX_DATETIME &dt)
\r
326 FromUnitime(ToUnitime() + ((const CFX_DateTime&)dt).ToUnitime());
\r
329 CFX_DateTime& operator -= (const CFX_DateTime &dt)
\r
331 FromUnitime(ToUnitime() - dt.ToUnitime());
\r
334 CFX_DateTime& operator -= (const FX_DATETIME &dt)
\r
336 FromUnitime(ToUnitime() - ((const CFX_DateTime&)dt).ToUnitime());
\r
339 virtual FX_BOOL Set(FX_INT32 year, FX_BYTE month, FX_BYTE day, FX_BYTE hour = 0, FX_BYTE minute = 0, FX_BYTE second = 0, FX_WORD millisecond = 0);
\r
340 virtual FX_BOOL FromUnitime(FX_UNITIME t);
\r
341 virtual FX_UNITIME ToUnitime() const;
\r
342 virtual FX_INT32 GetYear() const;
\r
343 virtual FX_BYTE GetMonth() const;
\r
344 virtual FX_BYTE GetDay() const;
\r
345 virtual FX_WEEKDAY GetDayOfWeek() const;
\r
346 virtual FX_WORD GetDayOfYear() const;
\r
347 virtual FX_INT64 GetDayOfAD() const;
\r
348 virtual FX_BYTE GetHour() const;
\r
349 virtual FX_BYTE GetMinute() const;
\r
350 virtual FX_BYTE GetSecond() const;
\r
351 virtual FX_WORD GetMillisecond() const;
\r
352 virtual FX_BOOL AddYears(FX_INT32 iYears);
\r
353 virtual FX_BOOL AddMonths(FX_INT32 iMonths);
\r
354 virtual FX_BOOL AddDays(FX_INT32 iDays);
\r
355 virtual FX_BOOL AddHours(FX_INT32 iHours);
\r
356 virtual FX_BOOL AddMinutes(FX_INT32 iMinutes);
\r
357 virtual FX_BOOL AddSeconds(FX_INT32 iSeconds);
\r
358 virtual FX_BOOL AddMilliseconds(FX_INT32 iMilliseconds);
\r
359 friend CFX_DateTime operator + (const CFX_DateTime &dt1, const CFX_DateTime &dt2)
\r
362 dt.FromUnitime(dt1.ToUnitime() + dt2.ToUnitime());
\r
365 friend CFX_DateTime operator + (const CFX_DateTime &dt1, const FX_DATETIME &dt2)
\r
368 dt.FromUnitime(dt1.ToUnitime() + ((const CFX_DateTime&)dt2).ToUnitime());
\r
371 friend CFX_DateTime operator + (const FX_DATETIME &dt1, const CFX_DateTime &dt2)
\r
374 dt.FromUnitime(((const CFX_DateTime&)dt1).ToUnitime() + dt2.ToUnitime());
\r
377 friend CFX_DateTime operator - (const CFX_DateTime &dt1, const CFX_DateTime &dt2)
\r
380 dt.FromUnitime(dt1.ToUnitime() - dt2.ToUnitime());
\r
383 friend CFX_DateTime operator - (const CFX_DateTime &dt1, const FX_DATETIME &dt2)
\r
386 dt.FromUnitime(dt1.ToUnitime() - ((const CFX_DateTime&)dt2).ToUnitime());
\r
389 friend CFX_DateTime operator - (const FX_DATETIME &dt1, const CFX_DateTime &dt2)
\r
392 dt.FromUnitime(((const CFX_DateTime&)dt1).ToUnitime() - dt2.ToUnitime());
\r
395 friend FX_BOOL operator == (const CFX_DateTime &dt1, const CFX_DateTime &dt2)
\r
397 return FXSYS_memcmp((FX_LPCDATETIME)dt1, (FX_LPCDATETIME)dt2, sizeof(FX_DATETIME)) == 0;
\r
399 friend FX_BOOL operator == (const CFX_DateTime &dt1, const FX_DATETIME &dt2)
\r
401 return FXSYS_memcmp((FX_LPCDATETIME)dt1, &dt2, sizeof(FX_DATETIME)) == 0;
\r
403 friend FX_BOOL operator == (const FX_DATETIME &dt1, const CFX_DateTime &dt2)
\r
405 return FXSYS_memcmp(&dt1, (FX_LPCDATETIME)dt2, sizeof(FX_DATETIME)) == 0;
\r
407 friend FX_BOOL operator != (const CFX_DateTime &dt1, const CFX_DateTime &dt2)
\r
409 return FXSYS_memcmp((FX_LPCDATETIME)dt1, (FX_LPCDATETIME)dt2, sizeof(FX_DATETIME)) != 0;
\r
411 friend FX_BOOL operator != (const CFX_DateTime &dt1, const FX_DATETIME &dt2)
\r
413 return FXSYS_memcmp((FX_LPCDATETIME)dt1, &dt2, sizeof(FX_DATETIME)) != 0;
\r
415 friend FX_BOOL operator != (const FX_DATETIME &dt1, const CFX_DateTime &dt2)
\r
417 return FXSYS_memcmp(&dt1, (FX_LPCDATETIME)dt2, sizeof(FX_DATETIME)) != 0;
\r
419 friend FX_BOOL operator > (const CFX_DateTime &dt1, const CFX_DateTime &dt2)
\r
421 return dt1.ToUnitime() > dt2.ToUnitime();
\r
423 friend FX_BOOL operator > (const CFX_DateTime &dt1, const FX_DATETIME &dt2)
\r
425 return dt1.ToUnitime() > ((const CFX_DateTime&)dt2).ToUnitime();
\r
427 friend FX_BOOL operator > (const FX_DATETIME &dt1, const CFX_DateTime &dt2)
\r
429 return ((const CFX_DateTime&)dt1).ToUnitime() > dt2.ToUnitime();
\r
431 friend FX_BOOL operator >= (const CFX_DateTime &dt1, const CFX_DateTime &dt2)
\r
433 return dt1.ToUnitime() >= dt2.ToUnitime();
\r
435 friend FX_BOOL operator >= (const CFX_DateTime &dt1, const FX_DATETIME &dt2)
\r
437 return dt1.ToUnitime() >= ((const CFX_DateTime&)dt2).ToUnitime();
\r
439 friend FX_BOOL operator >= (const FX_DATETIME &dt1, const CFX_DateTime &dt2)
\r
441 return ((const CFX_DateTime&)dt1).ToUnitime() >= dt2.ToUnitime();
\r
443 friend FX_BOOL operator < (const CFX_DateTime &dt1, const CFX_DateTime &dt2)
\r
445 return dt1.ToUnitime() < dt2.ToUnitime();
\r
447 friend FX_BOOL operator < (const CFX_DateTime &dt1, const FX_DATETIME &dt2)
\r
449 return dt1.ToUnitime() < ((const CFX_DateTime&)dt2).ToUnitime();
\r
451 friend FX_BOOL operator < (const FX_DATETIME &dt1, const CFX_DateTime &dt2)
\r
453 return ((const CFX_DateTime&)dt1).ToUnitime() < dt2.ToUnitime();
\r
455 friend FX_BOOL operator <= (const CFX_DateTime &dt1, const CFX_DateTime &dt2)
\r
457 return dt1.ToUnitime() <= dt2.ToUnitime();
\r
459 friend FX_BOOL operator <= (const CFX_DateTime &dt1, const FX_DATETIME &dt2)
\r
461 return dt1.ToUnitime() <= ((const CFX_DateTime&)dt2).ToUnitime();
\r
463 friend FX_BOOL operator <= (const FX_DATETIME &dt1, const CFX_DateTime &dt2)
\r
465 return ((const CFX_DateTime&)dt1).ToUnitime() <= dt2.ToUnitime();
\r
468 FX_DATETIME m_DateTime;
\r