DCL 4.0
Loading...
Searching...
No Matches
DateTime.h
Go to the documentation of this file.
1#ifndef __DCL_DATE_TIME_H__
2#define __DCL_DATE_TIME_H__ 20050323
3
4#ifndef __DCL_CONFIG_H__
5#include <dcl/Config.h>
6#endif
7#ifndef __DCL_STRING_H__
8#include <dcl/String.h>
9#endif
10#ifndef __DCL_EXCEPTION_H__
11#include <dcl/Exception.h>
12#endif
13
14__DCL_BEGIN_NAMESPACE
15
16class Date;
17class Time;
18class Interval;
19class DateTime;
20
21#define DATETIME_FORMAT_BUFFER_SIZE 256
22// valid range -9999-01-01 ~ 9999-12-31
23// internal range -599999-01-01 ~ 600000-12-31
25{
26public:
27 Date();
28 Date(const Date& src);
29 Date(int nYear, int nMonth, int nDay);
30
31 void assign(int nYear, int nMonth, int nDay);
32
33 // nDays == 0 : NULL
34 // nDays > 0 : 0001-01-01 ~
35 // nDays < 0 : ~ -0001-12-31
36 Date(long nDays);
37 void assign(long nDays);
38 long days() const;
39
40// long jdays() const { return m_nJDay; }
41
42 const Date& operator ++ ();
43 const Date operator ++ (int);
44 const Date& operator -- ();
45 const Date operator -- (int);
46
47 const Date& operator = (const Date& src);
48 const Date& operator += (long nDays);
49 const Date& operator -= (long nDays);
50
51 void decode(int& nYear, int& nMonth, int& nDay) const;
52
53 int year() const;
54 int month() const;
55 int day() const;
56
57 int dayOfWeek() const;
58 int dayOfYear() const;
59 int daysInMonth() const;
60 int daysInYear() const;
61
62 // yyyy-mm-dd
63 String toString() const;
64
65 // strftime
66 static const wchar_t* FORMAT_STRING; // ISO 8601 format %Y-%m-%d
67
68 String toStringF(const wchar_t* pszFormat = NULL) const;
69
70
71 // 0001-01-01 <= date <= 9999-12-31
72 static bool isValid(int y, int m, int d);
73
74 static bool isLeapYear(int nYear);
75
76protected:
77 long m_nJDay;
78
79 static long convertGregorianToJulian(
80 int nYear, int nMonth, int nDay
81 );
82
83 static void convertJulianToGregorian(
84 long uJulianDays,
85 int& nYear, int& nMonth, int& nDay
86 );
87};
88
89DCLCAPI Date operator + (const Date& d, long nDays);
90DCLCAPI Date operator + (long nDays, const Date& d);
91DCLCAPI Date operator - (const Date& d, long nDays);
92
93// return days
94DCLCAPI long operator - (const Date& d1, const Date& d2);
95
96DCLCAPI bool operator == (const Date& d1, const Date& d2);
97DCLCAPI bool operator != (const Date& d1, const Date& d2);
98DCLCAPI bool operator >= (const Date& d1, const Date& d2);
99DCLCAPI bool operator <= (const Date& d1, const Date& d2);
100DCLCAPI bool operator > (const Date& d1, const Date& d2);
101DCLCAPI bool operator < (const Date& d1, const Date& d2);
102
104{
105public:
106 Time();
107 Time(const Time& src);
108 Time(int nHour, int nMin, int nSec, int nMSec = 0);
109 Time(long nTotalMSecs);
110
111 void assign(int nHour, int nMin, int nSec, int nMSec = 0);
112 void assign(long nTotalMSecs);
113
114 const Time& operator = (const Time& src);
115 const Time& operator += (long nMilliSeconds);
116 const Time& operator -= (long nMilliSeconds);
117
118 void decode(int& nHour, int& nMin, int& nSec, int& nMSec) const;
119
120 int hour() const; // 0 ~ 23
121 int minute() const; // 0 ~ 59
122 int second() const; // 0 ~ 59
123 int msecond() const; // 0 ~ 999
124
125 // HH:MM:SS.MS 00:00:00.000
126 String toString() const;
127
128 // strftime
129 static const wchar_t* FORMAT_STRING;
130
131 String toStringF(const wchar_t* pszFormat = NULL);
132
133 long totalMilliSeconds() const; // 0 ~ (86400000 - 1)
134
135 static bool isValid(int nHour, int nMin, int nSec, int nMSec);
136
137
138protected:
139 unsigned long m_uMilliSeconds;
140};
141
142DCLCAPI Time operator + (const Time& t, long nMilliSeconds);
143DCLCAPI Time operator + (long nMilliSeconds, const Time& t);
144DCLCAPI Time operator - (const Time& t, long nMilliSeconds);
145
146// return milliseconds
147DCLCAPI long operator - (const Time& t1, const Time& t2);
148
149DCLCAPI bool operator == (const Time& t1, const Time& t2);
150DCLCAPI bool operator != (const Time& t1, const Time& t2);
151DCLCAPI bool operator >= (const Time& t1, const Time& t2);
152DCLCAPI bool operator <= (const Time& t1, const Time& t2);
153DCLCAPI bool operator > (const Time& t1, const Time& t2);
154DCLCAPI bool operator < (const Time& t1, const Time& t2);
155
157{
158public:
159 Interval();
160 Interval(const Interval& src);
161 Interval(int nDays, int nMilliSeconds);
162 Interval(int nDays,
163 int nHours, int nMinutes, int nSeconds,
164 int nMilliSeconds = 0
165 );
166 Interval(int64_t nTotalMilliSeconds);
167
168 void assign(int nDays, int nMilliSeconds);
169 void assign(int nDays,
170 int nHours, int nMinutes, int nSeconds,
171 int nMilliSeconds = 0
172 );
173 void assign(int64_t nTotalMilliSeconds);
174
175 const Interval& operator = (const Interval& src);
176 const Interval& operator += (const Interval& iv);
177 const Interval& operator -= (const Interval& iv);
178
179 void decode(long& nDays,
180 int& nHours, int& nMinutes, int& nSeconds,
181 int& nMilliSeconds
182 ) const;
183 void decode(long& nDays, long& nMilliSeconds);
184
185 long days() const;
186 int hour() const; // -23 ~ 23
187 int minute() const; // -59 ~ 59
188 int second() const; // -59 ~ 59
189 int msecond() const; // -999 ~ 999
190
191 int64_t totalHours() const;
192 int64_t totalMinutes() const;
193 int64_t totalSeconds() const;
194 int64_t totalMilliSeconds() const;
195
196 // [-]000 days [-]00:00:00.000
197 String toString() const;
198
199protected:
201};
202
203DCLCAPI Interval operator + (const Interval& iv1, const Interval& iv2);
204DCLCAPI Interval operator - (const Interval& iv1, const Interval& iv2);
205
206DCLCAPI bool operator == (const Interval& iv1, const Interval& iv2);
207DCLCAPI bool operator != (const Interval& iv1, const Interval& iv2);
208DCLCAPI bool operator >= (const Interval& iv1, const Interval& iv2);
209DCLCAPI bool operator <= (const Interval& iv1, const Interval& iv2);
210DCLCAPI bool operator > (const Interval& iv1, const Interval& iv2);
211DCLCAPI bool operator < (const Interval& iv1, const Interval& iv2);
212
214{
215public:
217 DateTime(const DateTime& src);
218 DateTime(time_t timer);
219 DateTime(const Date& date, const Time& time);
220 DateTime(int nYear, int nMonth, int nDay,
221 int nHour, int nMin, int nSec, int nMSec = 0);
222
223 void assign(time_t time);
224 void assign(const Date& date, const Time& time);
225 void assign(int nYear, int nMonth, int nDay,
226 int nHour, int nMin, int nSec, int nMSec = 0);
227
228 const DateTime& operator = (const DateTime& src);
229 const DateTime& operator += (const Interval& iv);
230 const DateTime& operator -= (const Interval& iv);
231
232 // Date::toString() + Time::toString()
233 String toString() const;
234
235 // stftime
236 static const wchar_t* FORMAT_STRING;
237
238 String toStringF(const wchar_t* pszFormat = NULL) const;
239
240 Date& date();
241 const Date& date() const;
242
243 Time& time();
244 const Time& time() const;
245
246 static int compare(const DateTime& dt1, const DateTime& dt2);
247
248 static int64_t getCurrentTimeMillis();
251
252/*
253 static time_t parse(const char* pszDateTimeString)
254 __DCL_THROWS1(ParseException*);
255
256 // strptime
257 static DateTime parseF(
258 const wchar_t* pszDateTimeString,
259 const wchar_t* pszFormat
260 ) __DCL_THROWS1(ParseException*);
261*/
262
263protected:
266
267};
268
269DCLCAPI DateTime operator + (const DateTime& dt, const Interval& iv);
270DCLCAPI DateTime operator + (const Interval& iv, const DateTime& dt);
271DCLCAPI DateTime operator - (const DateTime& dt, const Interval& iv);
272DCLCAPI Interval operator - (const DateTime& dt1, const DateTime& dt2);
273
274DCLCAPI bool operator == (const DateTime& dt1, const DateTime& dt2);
275DCLCAPI bool operator != (const DateTime& dt1, const DateTime& dt2);
276DCLCAPI bool operator >= (const DateTime& dt1, const DateTime& dt2);
277DCLCAPI bool operator <= (const DateTime& dt1, const DateTime& dt2);
278DCLCAPI bool operator > (const DateTime& dt1, const DateTime& dt2);
279DCLCAPI bool operator < (const DateTime& dt1, const DateTime& dt2);
280
281
282#include "DateTime.inl"
283
284__DCL_END_NAMESPACE
285
286#endif // __DCL_DATE_TIME_H__
287
#define NULL
Definition Config.h:340
#define DCLCAPI
Definition Config.h:100
DCLCAPI Date operator-(const Date &d, long nDays)
Definition DateTime.inl:23
DCLCAPI bool operator>=(const Date &d1, const Date &d2)
Definition DateTime.inl:43
DCLCAPI bool operator<=(const Date &d1, const Date &d2)
Definition DateTime.inl:48
DCLCAPI bool operator==(const Date &d1, const Date &d2)
Definition DateTime.inl:33
DCLCAPI bool operator>(const Date &d1, const Date &d2)
Definition DateTime.inl:53
DCLCAPI bool operator!=(const Date &d1, const Date &d2)
Definition DateTime.inl:38
DCLCAPI Date operator+(const Date &d, long nDays)
Definition DateTime.cpp:178
DCLCAPI bool operator<(const Date &d1, const Date &d2)
Definition DateTime.inl:58
void assign(int nYear, int nMonth, int nDay)
Definition DateTime.cpp:49
void decode(int &nYear, int &nMonth, int &nDay) const
Definition DateTime.cpp:185
static bool isLeapYear(int nYear)
Definition DateTime.cpp:370
long days() const
Definition DateTime.cpp:74
int day() const
Definition DateTime.cpp:204
long m_nJDay
Definition DateTime.h:77
static bool isValid(int y, int m, int d)
Definition DateTime.cpp:350
int daysInYear() const
Definition DateTime.cpp:237
int month() const
Definition DateTime.cpp:197
static const wchar_t * FORMAT_STRING
Definition DateTime.h:66
String toString() const
Definition DateTime.cpp:247
String toStringF(const wchar_t *pszFormat=NULL) const
Definition DateTime.cpp:256
int dayOfWeek() const
Definition DateTime.cpp:211
int daysInMonth() const
Definition DateTime.cpp:227
static long convertGregorianToJulian(int nYear, int nMonth, int nDay)
Definition DateTime.cpp:285
static void convertJulianToGregorian(long uJulianDays, int &nYear, int &nMonth, int &nDay)
Definition DateTime.cpp:313
Date()
Definition DateTime.cpp:29
int year() const
Definition DateTime.cpp:190
int dayOfYear() const
Definition DateTime.cpp:216
Time m_time
Definition DateTime.h:265
Date m_date
Definition DateTime.h:264
Time & time()
Definition DateTime.inl:162
static int compare(const DateTime &dt1, const DateTime &dt2)
Definition DateTime.cpp:869
String toStringF(const wchar_t *pszFormat=NULL) const
Definition DateTime.cpp:834
static const wchar_t * FORMAT_STRING
Definition DateTime.h:236
static DateTime getCurrentUTCTime()
Definition DateTime.cpp:904
static int64_t getCurrentTimeMillis()
Definition DateTime.cpp:882
Date & date()
Definition DateTime.inl:152
static DateTime getCurrentLocalTime()
Definition DateTime.cpp:937
long days() const
Definition DateTime.cpp:637
int64_t totalHours() const
Definition DateTime.cpp:662
int64_t totalMinutes() const
Definition DateTime.cpp:667
int hour() const
Definition DateTime.cpp:642
int64_t totalSeconds() const
Definition DateTime.cpp:672
String toString() const
Definition DateTime.cpp:677
void assign(int nDays, int nMilliSeconds)
Definition DateTime.cpp:564
int minute() const
Definition DateTime.cpp:647
int64_t m_nMilliSeconds
Definition DateTime.h:200
void decode(long &nDays, int &nHours, int &nMinutes, int &nSeconds, int &nMilliSeconds) const
Definition DateTime.cpp:619
int64_t totalMilliSeconds() const
Definition DateTime.inl:116
int msecond() const
Definition DateTime.cpp:657
int second() const
Definition DateTime.cpp:652
int hour() const
Definition DateTime.cpp:467
int second() const
Definition DateTime.cpp:477
static const wchar_t * FORMAT_STRING
Definition DateTime.h:129
void decode(int &nHour, int &nMin, int &nSec, int &nMSec) const
Definition DateTime.cpp:459
int msecond() const
Definition DateTime.cpp:482
int minute() const
Definition DateTime.cpp:472
void assign(int nHour, int nMin, int nSec, int nMSec=0)
Definition DateTime.cpp:406
String toString() const
Definition DateTime.cpp:488
static bool isValid(int nHour, int nMin, int nSec, int nMSec)
Definition DateTime.cpp:525
long totalMilliSeconds() const
Definition DateTime.inl:65
String toStringF(const wchar_t *pszFormat=NULL)
Definition DateTime.cpp:500
unsigned long m_uMilliSeconds
Definition DateTime.h:139