9 #include <boost/test/unit_test.hpp> 11 #define BOOST_TEST_MODULE test_hikyuu_datetime 12 #include <boost/test/unit_test.hpp> 15 #include <hikyuu/datetime/Datetime.h> 16 #include <hikyuu/utilities/Null.h> 28 Datetime null_datetime = Null<Datetime>();
32 BOOST_CHECK(d == Null<Datetime>());
33 BOOST_CHECK(Null<Datetime>() == d);
34 d = Datetime(201208062359);
35 BOOST_CHECK(d < Null<Datetime>());
38 d = Datetime(Null<unsigned long long>());
39 BOOST_CHECK(d == Null<Datetime>());
42 d = Datetime(200101010110);
44 BOOST_CHECK(Datetime(200101010000) == d);
47 BOOST_CHECK_THROW(Datetime(99999,1,1), std::out_of_range);
48 BOOST_CHECK_THROW(Datetime(000001010000L), std::out_of_range);
51 BOOST_CHECK_THROW(Datetime(2010,13,1), std::out_of_range);
52 BOOST_CHECK_THROW(Datetime(2010,0,1), std::out_of_range);
54 BOOST_CHECK_THROW(Datetime(201013010000L), std::out_of_range);
55 BOOST_CHECK_THROW(Datetime(201000010000L), std::out_of_range);
58 BOOST_CHECK_THROW(Datetime(2010,1,0), std::out_of_range);
59 BOOST_CHECK_THROW(Datetime(2010,1,32), std::out_of_range);
61 BOOST_CHECK_THROW(Datetime(201001000000L), std::out_of_range);
62 BOOST_CHECK_THROW(Datetime(201001320000L), std::out_of_range);
65 BOOST_CHECK_THROW(Datetime(201001012400L), std::out_of_range);
66 BOOST_CHECK_THROW(Datetime(201001012500L), std::out_of_range);
69 BOOST_CHECK_THROW(Datetime(201001010060L), std::out_of_range);
70 BOOST_CHECK_THROW(Datetime(201001010061L), std::out_of_range);
73 d = Datetime(201208062359);
74 BOOST_CHECK(2012 == d.year());
75 BOOST_CHECK(8 == d.month());
76 BOOST_CHECK(6 == d.day());
77 BOOST_CHECK(23 == d.hour());
78 BOOST_CHECK(59 == d.minute());
81 unsigned long long x = d.number();
82 BOOST_CHECK(x == 201208062359);
89 x = Null<unsigned long long>();
91 BOOST_CHECK(x == d.number());
94 d = Datetime(
"2001-Jan-01 06:30:00");
95 BOOST_CHECK(
"2001-Jan-01 06:30:00" == d.toString());
98 BOOST_CHECK(Datetime(201801010000L).dayOfWeek() == 1);
99 BOOST_CHECK(Datetime(201801060000L).dayOfWeek() == 6);
100 BOOST_CHECK(Datetime(201801070000L).dayOfWeek() == 0);
103 BOOST_CHECK(Datetime(201801010000L).dayOfYear() == 1);
104 BOOST_CHECK(Datetime(201812310000L).dayOfYear() == 365);
107 BOOST_CHECK(null_datetime.dateOfWeek(-1) == null_datetime);
108 BOOST_CHECK(null_datetime.dateOfWeek(0) == null_datetime);
109 BOOST_CHECK(null_datetime.dateOfWeek(4) == null_datetime);
110 BOOST_CHECK(null_datetime.dateOfWeek(6) == null_datetime);
111 BOOST_CHECK(null_datetime.dateOfWeek(7) == null_datetime);
112 BOOST_CHECK(Datetime(201901010000).dateOfWeek(-1) == Datetime(201812300000));
113 BOOST_CHECK(Datetime(201901010000).dateOfWeek(0) == Datetime(201812300000));
114 BOOST_CHECK(Datetime(201901010000).dateOfWeek(1) == Datetime(201812310000));
115 BOOST_CHECK(Datetime(201901010000).dateOfWeek(2) == Datetime(201901010000));
116 BOOST_CHECK(Datetime(201901010000).dateOfWeek(3) == Datetime(201901020000));
117 BOOST_CHECK(Datetime(201901010000).dateOfWeek(4) == Datetime(201901030000));
118 BOOST_CHECK(Datetime(201901010000).dateOfWeek(5) == Datetime(201901040000));
119 BOOST_CHECK(Datetime(201901010000).dateOfWeek(6) == Datetime(201901050000));
120 BOOST_CHECK(Datetime(201901010000).dateOfWeek(7) == Datetime(201901050000));
123 BOOST_CHECK(null_datetime.startOfWeek() == null_datetime);
124 BOOST_CHECK(Datetime::min().startOfWeek() == Datetime::min());
125 BOOST_CHECK(Datetime::max().startOfWeek() == Datetime(9999, 12, 27));
126 BOOST_CHECK(Datetime(201812310000).startOfWeek() == Datetime(201812310000));
127 BOOST_CHECK(Datetime(201901050000).startOfWeek() == Datetime(201812310000));
128 BOOST_CHECK(Datetime(201901060000).startOfWeek() == Datetime(201812310000));
129 BOOST_CHECK(Datetime(201901090000).startOfWeek() == Datetime(201901070000));
132 BOOST_CHECK(null_datetime.endOfWeek() == null_datetime);
133 BOOST_CHECK(Datetime::min().endOfWeek() == Datetime(1400, 1, 5));
134 BOOST_CHECK(Datetime::max().endOfWeek() == Datetime::max());
135 BOOST_CHECK(Datetime(201812310000).endOfWeek() == Datetime(201901060000));
136 BOOST_CHECK(Datetime(201901050000).endOfWeek() == Datetime(201901060000));
137 BOOST_CHECK(Datetime(201901060000).endOfWeek() == Datetime(201901060000));
138 BOOST_CHECK(Datetime(201901090000).endOfWeek() == Datetime(201901130000));
141 BOOST_CHECK(null_datetime.startOfMonth() == null_datetime);
142 BOOST_CHECK(Datetime::min().startOfMonth() == Datetime::min());
143 BOOST_CHECK(Datetime::max().startOfMonth() == Datetime(9999, 12, 1));
144 BOOST_CHECK(Datetime(201901050000).startOfMonth() == Datetime(201901010000));
145 BOOST_CHECK(Datetime(201902050000).startOfMonth() == Datetime(201902010000));
146 BOOST_CHECK(Datetime(201902010000).startOfMonth() == Datetime(201902010000));
147 BOOST_CHECK(Datetime(201903030000).startOfMonth() == Datetime(201903010000));
148 BOOST_CHECK(Datetime(201904030000).startOfMonth() == Datetime(201904010000));
149 BOOST_CHECK(Datetime(201912030000).startOfMonth() == Datetime(201912010000));
152 BOOST_CHECK(null_datetime.endOfMonth() == null_datetime);
153 BOOST_CHECK(Datetime::max().endOfMonth() == Datetime::max());
154 BOOST_CHECK(Datetime::min().endOfMonth() == Datetime(1400, 1, 31));
155 BOOST_CHECK(Datetime(201801010000L).endOfMonth() == Datetime(201801310000L));
156 BOOST_CHECK(Datetime(201802010000L).endOfMonth() == Datetime(201802280000L));
157 BOOST_CHECK(Datetime(201803010000L).endOfMonth() == Datetime(201803310000L));
158 BOOST_CHECK(Datetime(201804010000L).endOfMonth() == Datetime(201804300000L));
159 BOOST_CHECK(Datetime(201805010000L).endOfMonth() == Datetime(201805310000L));
160 BOOST_CHECK(Datetime(201806010000L).endOfMonth() == Datetime(201806300000L));
161 BOOST_CHECK(Datetime(201807010000L).endOfMonth() == Datetime(201807310000L));
162 BOOST_CHECK(Datetime(201808010000L).endOfMonth() == Datetime(201808310000L));
163 BOOST_CHECK(Datetime(201809010000L).endOfMonth() == Datetime(201809300000L));
164 BOOST_CHECK(Datetime(201810010000L).endOfMonth() == Datetime(201810310000L));
165 BOOST_CHECK(Datetime(201811010000L).endOfMonth() == Datetime(201811300000L));
166 BOOST_CHECK(Datetime(201812010000L).endOfMonth() == Datetime(201812310000L));
169 BOOST_CHECK(null_datetime.startOfQuarter() == null_datetime);
170 BOOST_CHECK(Datetime::min().startOfQuarter() == Datetime::min());
171 BOOST_CHECK(Datetime::max().startOfQuarter() == Datetime(9999, 10, 1));
172 BOOST_CHECK(Datetime(201902050000).startOfQuarter() == Datetime(201901010000));
173 BOOST_CHECK(Datetime(201901010000).startOfQuarter() == Datetime(201901010000));
174 BOOST_CHECK(Datetime(201903310000).startOfQuarter() == Datetime(201901010000));
175 BOOST_CHECK(Datetime(201904010000).startOfQuarter() == Datetime(201904010000));
176 BOOST_CHECK(Datetime(201905010000).startOfQuarter() == Datetime(201904010000));
177 BOOST_CHECK(Datetime(201906300000).startOfQuarter() == Datetime(201904010000));
178 BOOST_CHECK(Datetime(201907010000).startOfQuarter() == Datetime(201907010000));
179 BOOST_CHECK(Datetime(201907060000).startOfQuarter() == Datetime(201907010000));
180 BOOST_CHECK(Datetime(201909300000).startOfQuarter() == Datetime(201907010000));
181 BOOST_CHECK(Datetime(201910010000).startOfQuarter() == Datetime(201910010000));
182 BOOST_CHECK(Datetime(201911010000).startOfQuarter() == Datetime(201910010000));
183 BOOST_CHECK(Datetime(201912310000).startOfQuarter() == Datetime(201910010000));
186 BOOST_CHECK(null_datetime.endOfQuarter() == null_datetime);
187 BOOST_CHECK(Datetime::min().endOfQuarter() == Datetime(1400, 3, 31));
188 BOOST_CHECK(Datetime::max().endOfQuarter() == Datetime::max());
189 BOOST_CHECK(Datetime(201902050000).endOfQuarter() == Datetime(201903310000));
190 BOOST_CHECK(Datetime(201901010000).endOfQuarter() == Datetime(201903310000));
191 BOOST_CHECK(Datetime(201903310000).endOfQuarter() == Datetime(201903310000));
192 BOOST_CHECK(Datetime(201904010000).endOfQuarter() == Datetime(201906300000));
193 BOOST_CHECK(Datetime(201905010000).endOfQuarter() == Datetime(201906300000));
194 BOOST_CHECK(Datetime(201906300000).endOfQuarter() == Datetime(201906300000));
195 BOOST_CHECK(Datetime(201907010000).endOfQuarter() == Datetime(201909300000));
196 BOOST_CHECK(Datetime(201907060000).endOfQuarter() == Datetime(201909300000));
197 BOOST_CHECK(Datetime(201909300000).endOfQuarter() == Datetime(201909300000));
198 BOOST_CHECK(Datetime(201910010000).endOfQuarter() == Datetime(201912310000));
199 BOOST_CHECK(Datetime(201911010000).endOfQuarter() == Datetime(201912310000));
200 BOOST_CHECK(Datetime(201912310000).endOfQuarter() == Datetime(201912310000));
203 BOOST_CHECK(null_datetime.startOfHalfyear() == null_datetime);
204 BOOST_CHECK(Datetime::min().startOfHalfyear() == Datetime::min());
205 BOOST_CHECK(Datetime::max().startOfHalfyear() == Datetime(9999, 7, 1));
206 BOOST_CHECK(Datetime(201812310000).startOfHalfyear() == Datetime(201807010000));
207 BOOST_CHECK(Datetime(201901010000).startOfHalfyear() == Datetime(201901010000));
208 BOOST_CHECK(Datetime(201901020000).startOfHalfyear() == Datetime(201901010000));
209 BOOST_CHECK(Datetime(201906050000).startOfHalfyear() == Datetime(201901010000));
210 BOOST_CHECK(Datetime(201906300000).startOfHalfyear() == Datetime(201901010000));
211 BOOST_CHECK(Datetime(201907010000).startOfHalfyear() == Datetime(201907010000));
212 BOOST_CHECK(Datetime(201907100000).startOfHalfyear() == Datetime(201907010000));
213 BOOST_CHECK(Datetime(201912010000).startOfHalfyear() == Datetime(201907010000));
214 BOOST_CHECK(Datetime(201912310000).startOfHalfyear() == Datetime(201907010000));
217 BOOST_CHECK(null_datetime.endOfHalfyear() == null_datetime);
218 BOOST_CHECK(Datetime::min().endOfHalfyear() == Datetime(1400, 6, 30));
219 BOOST_CHECK(Datetime::max().endOfHalfyear() == Datetime::max());
220 BOOST_CHECK(Datetime(201812310000).endOfHalfyear() == Datetime(201812310000));
221 BOOST_CHECK(Datetime(201901010000).endOfHalfyear() == Datetime(201906300000));
222 BOOST_CHECK(Datetime(201901020000).endOfHalfyear() == Datetime(201906300000));
223 BOOST_CHECK(Datetime(201906050000).endOfHalfyear() == Datetime(201906300000));
224 BOOST_CHECK(Datetime(201906300000).endOfHalfyear() == Datetime(201906300000));
225 BOOST_CHECK(Datetime(201907010000).endOfHalfyear() == Datetime(201912310000));
226 BOOST_CHECK(Datetime(201907100000).endOfHalfyear() == Datetime(201912310000));
227 BOOST_CHECK(Datetime(201912010000).endOfHalfyear() == Datetime(201912310000));
228 BOOST_CHECK(Datetime(201912310000).endOfHalfyear() == Datetime(201912310000));
231 BOOST_CHECK(null_datetime.startOfYear() == null_datetime);
232 BOOST_CHECK(Datetime::min().startOfYear() == Datetime::min());
233 BOOST_CHECK(Datetime::max().startOfYear() == Datetime(9999, 1, 1));
234 BOOST_CHECK(Datetime(201901050000).startOfYear() == Datetime(201901010000));
235 BOOST_CHECK(Datetime(201911050000).startOfYear() == Datetime(201901010000));
238 BOOST_CHECK(null_datetime.endOfYear() == null_datetime);
239 BOOST_CHECK(Datetime::min().endOfYear() == Datetime(1400, 12, 31));
240 BOOST_CHECK(Datetime::max().endOfYear() == Datetime::max());
241 BOOST_CHECK(Datetime(201902050000).endOfYear() == Datetime(201912310000));
242 BOOST_CHECK(Datetime(201912310000).endOfYear() == Datetime(201912310000));
245 BOOST_CHECK(null_datetime.nextDay() == null_datetime);
246 BOOST_CHECK(Datetime::max().nextDay() == Datetime::max());
247 BOOST_CHECK(Datetime(201802060000L).nextDay() == Datetime(201802070000L));
248 BOOST_CHECK(Datetime(201802280000L).nextDay() == Datetime(201803010000L));
249 BOOST_CHECK(Datetime(201602280000L).nextDay() == Datetime(201602290000L));
252 BOOST_CHECK(null_datetime.nextWeek() == null_datetime);
253 BOOST_CHECK(Datetime::max().nextWeek() == Datetime::max());
254 BOOST_CHECK(Datetime(201812300000).nextWeek() == Datetime(201812310000));
255 BOOST_CHECK(Datetime(201812310000).nextWeek() == Datetime(201901070000));
256 BOOST_CHECK(Datetime(201901010000).nextWeek() == Datetime(201901070000));
257 BOOST_CHECK(Datetime(201901020000).nextWeek() == Datetime(201901070000));
258 BOOST_CHECK(Datetime(201901030000).nextWeek() == Datetime(201901070000));
259 BOOST_CHECK(Datetime(201901040000).nextWeek() == Datetime(201901070000));
260 BOOST_CHECK(Datetime(201901050000).nextWeek() == Datetime(201901070000));
261 BOOST_CHECK(Datetime(201901060000).nextWeek() == Datetime(201901070000));
262 BOOST_CHECK(Datetime(201901070000).nextWeek() == Datetime(201901140000));
265 BOOST_CHECK(null_datetime.nextMonth() == null_datetime);
266 BOOST_CHECK(Datetime::max().nextMonth() == Datetime::max());
267 BOOST_CHECK(Datetime(201812310000).nextMonth() == Datetime(201901010000));
268 BOOST_CHECK(Datetime(201901010000).nextMonth() == Datetime(201902010000));
269 BOOST_CHECK(Datetime(201901310000).nextMonth() == Datetime(201902010000));
272 BOOST_CHECK(null_datetime.nextQuarter() == null_datetime);
273 BOOST_CHECK(Datetime::max().nextQuarter() == Datetime::max());
274 BOOST_CHECK(Datetime(201901010000).nextQuarter() == Datetime(201904010000));
275 BOOST_CHECK(Datetime(201902010000).nextQuarter() == Datetime(201904010000));
276 BOOST_CHECK(Datetime(201903310000).nextQuarter() == Datetime(201904010000));
277 BOOST_CHECK(Datetime(201904010000).nextQuarter() == Datetime(201907010000));
278 BOOST_CHECK(Datetime(201905010000).nextQuarter() == Datetime(201907010000));
279 BOOST_CHECK(Datetime(201906300000).nextQuarter() == Datetime(201907010000));
280 BOOST_CHECK(Datetime(201907010000).nextQuarter() == Datetime(201910010000));
281 BOOST_CHECK(Datetime(201907020000).nextQuarter() == Datetime(201910010000));
282 BOOST_CHECK(Datetime(201908010000).nextQuarter() == Datetime(201910010000));
283 BOOST_CHECK(Datetime(201909300000).nextQuarter() == Datetime(201910010000));
284 BOOST_CHECK(Datetime(201910010000).nextQuarter() == Datetime(202001010000));
285 BOOST_CHECK(Datetime(201911010000).nextQuarter() == Datetime(202001010000));
286 BOOST_CHECK(Datetime(201912310000).nextQuarter() == Datetime(202001010000));
289 BOOST_CHECK(null_datetime.nextHalfyear() == null_datetime);
290 BOOST_CHECK(Datetime::max().nextHalfyear() == Datetime::max());
291 BOOST_CHECK(Datetime(201812310000).nextHalfyear() == Datetime(201901010000));
292 BOOST_CHECK(Datetime(201901010000).nextHalfyear() == Datetime(201907010000));
293 BOOST_CHECK(Datetime(201905050000).nextHalfyear() == Datetime(201907010000));
294 BOOST_CHECK(Datetime(201906300000).nextHalfyear() == Datetime(201907010000));
295 BOOST_CHECK(Datetime(201907010000).nextHalfyear() == Datetime(202001010000));
296 BOOST_CHECK(Datetime(201910110000).nextHalfyear() == Datetime(202001010000));
297 BOOST_CHECK(Datetime(201912310000).nextHalfyear() == Datetime(202001010000));
300 BOOST_CHECK(null_datetime.nextYear() == null_datetime);
301 BOOST_CHECK(Datetime::max().nextYear() == Datetime::max());
302 BOOST_CHECK(Datetime(201812310000).nextYear() == Datetime(201901010000));
303 BOOST_CHECK(Datetime(201901010000).nextYear() == Datetime(202001010000));
304 BOOST_CHECK(Datetime(201901020000).nextYear() == Datetime(202001010000));
305 BOOST_CHECK(Datetime(201907310000).nextYear() == Datetime(202001010000));
306 BOOST_CHECK(Datetime(201912310000).nextYear() == Datetime(202001010000));
309 BOOST_CHECK(null_datetime.preDay() == null_datetime);
310 BOOST_CHECK(Datetime::min().preDay() == Datetime::min());
311 BOOST_CHECK(Datetime(201812310000).preDay() == Datetime(201812300000));
312 BOOST_CHECK(Datetime(201901010000).preDay() == Datetime(201812310000));
313 BOOST_CHECK(Datetime(201901020000).preDay() == Datetime(201901010000));
316 BOOST_CHECK(null_datetime.preWeek() == null_datetime);
317 BOOST_CHECK(Datetime::min().preWeek() == Datetime::min());
318 BOOST_CHECK(Datetime(201812310000).preWeek() == Datetime(201812240000));
319 BOOST_CHECK(Datetime(201901010000).preWeek() == Datetime(201812240000));
320 BOOST_CHECK(Datetime(201901020000).preWeek() == Datetime(201812240000));
321 BOOST_CHECK(Datetime(201901030000).preWeek() == Datetime(201812240000));
322 BOOST_CHECK(Datetime(201901040000).preWeek() == Datetime(201812240000));
323 BOOST_CHECK(Datetime(201901050000).preWeek() == Datetime(201812240000));
324 BOOST_CHECK(Datetime(201901060000).preWeek() == Datetime(201812240000));
325 BOOST_CHECK(Datetime(201901070000).preWeek() == Datetime(201812310000));
328 BOOST_CHECK(null_datetime.preMonth() == null_datetime);
329 BOOST_CHECK(Datetime::min().preMonth() == Datetime::min());
330 BOOST_CHECK(Datetime(201602290000).preMonth() == Datetime(201601010000));
331 BOOST_CHECK(Datetime(201901010000).preMonth() == Datetime(201812010000));
332 BOOST_CHECK(Datetime(201901020000).preMonth() == Datetime(201812010000));
333 BOOST_CHECK(Datetime(201901310000).preMonth() == Datetime(201812010000));
334 BOOST_CHECK(Datetime(201902010000).preMonth() == Datetime(201901010000));
335 BOOST_CHECK(Datetime(201902280000).preMonth() == Datetime(201901010000));
336 BOOST_CHECK(Datetime(201903010000).preMonth() == Datetime(201902010000));
337 BOOST_CHECK(Datetime(201903310000).preMonth() == Datetime(201902010000));
338 BOOST_CHECK(Datetime(201904010000).preMonth() == Datetime(201903010000));
339 BOOST_CHECK(Datetime(201904300000).preMonth() == Datetime(201903010000));
340 BOOST_CHECK(Datetime(201905300000).preMonth() == Datetime(201904010000));
341 BOOST_CHECK(Datetime(201912310000).preMonth() == Datetime(201911010000));
342 BOOST_CHECK(Datetime(201912300000).preMonth() == Datetime(201911010000));
345 BOOST_CHECK(null_datetime.preQuarter() == null_datetime);
346 BOOST_CHECK(Datetime::min().preQuarter() == Datetime::min());
347 BOOST_CHECK(Datetime(201901010000).preQuarter() == Datetime(201810010000));
348 BOOST_CHECK(Datetime(201903310000).preQuarter() == Datetime(201810010000));
349 BOOST_CHECK(Datetime(201904010000).preQuarter() == Datetime(201901010000));
350 BOOST_CHECK(Datetime(201906300000).preQuarter() == Datetime(201901010000));
351 BOOST_CHECK(Datetime(201907010000).preQuarter() == Datetime(201904010000));
352 BOOST_CHECK(Datetime(201909300000).preQuarter() == Datetime(201904010000));
353 BOOST_CHECK(Datetime(201910010000).preQuarter() == Datetime(201907010000));
354 BOOST_CHECK(Datetime(201912310000).preQuarter() == Datetime(201907010000));
357 BOOST_CHECK(null_datetime.preHalfyear() == null_datetime);
358 BOOST_CHECK(Datetime::min().preHalfyear() == Datetime::min());
359 BOOST_CHECK(Datetime(201901010000).preHalfyear() == Datetime(201807010000));
360 BOOST_CHECK(Datetime(201906300000).preHalfyear() == Datetime(201807010000));
361 BOOST_CHECK(Datetime(201907010000).preHalfyear() == Datetime(201901010000));
362 BOOST_CHECK(Datetime(201912310000).preHalfyear() == Datetime(201901010000));
363 BOOST_CHECK(Datetime(202001010000).preHalfyear() == Datetime(201907010000));
366 BOOST_CHECK(null_datetime.preYear() == null_datetime);
367 BOOST_CHECK(Datetime::min().preYear() == Datetime::min());
368 BOOST_CHECK(Datetime(201901010000).preYear() == Datetime(201801010000));
369 BOOST_CHECK(Datetime(201912310000).preYear() == Datetime(201801010000));
370 BOOST_CHECK(Datetime(201601010000).preYear() == Datetime(201501010000));
371 BOOST_CHECK(Datetime(201612310000).preYear() == Datetime(201501010000));
377 BOOST_CHECK(Datetime(200101010000) < Null<Datetime>());
378 BOOST_CHECK(Datetime(200101010000) < Datetime::max());
379 BOOST_CHECK(Datetime::min() < Datetime(200101010000));
380 BOOST_CHECK(Datetime(200101010000) < Datetime(200101020000));
BOOST_AUTO_TEST_CASE(test_Datetime)