Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(334)

Side by Side Diff: tests/corelib/date_time_test.dart

Issue 165723005: Add toIso8601String to DateTime. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments. Add test. Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sdk/lib/core/date_time.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import "package:expect/expect.dart"; 5 import "package:expect/expect.dart";
6 6
7 // Dart test program for DateTime. 7 // Dart test program for DateTime.
8 8
9 class DateTest { 9 // Tests if the time moves eventually forward.
10 // Tests if the time moves eventually forward. 10 void testNow() {
11 static void testNow() { 11 var t1 = new DateTime.now();
12 var t1 = new DateTime.now(); 12 bool timeMovedForward = false;
13 bool timeMovedForward = false; 13 for (int i = 0; i < 1000000; i++) {
14 for (int i = 0; i < 1000000; i++) { 14 var t2 = new DateTime.now();
15 var t2 = new DateTime.now(); 15 if (t1.millisecondsSinceEpoch < t2.millisecondsSinceEpoch) {
16 if (t1.millisecondsSinceEpoch < t2.millisecondsSinceEpoch) { 16 timeMovedForward = true;
17 timeMovedForward = true; 17 break;
18 break;
19 }
20 } 18 }
21 Expect.equals(true, timeMovedForward);
22 Expect.isFalse(t1.isUtc);
23 } 19 }
24 20 Expect.equals(true, timeMovedForward);
25 static void testValue() { 21 Expect.isFalse(t1.isUtc);
26 var dt1 = new DateTime.now(); 22 }
27 var millisecondsSinceEpoch = dt1.millisecondsSinceEpoch; 23
28 var dt2 = new DateTime.fromMillisecondsSinceEpoch(millisecondsSinceEpoch); 24 void testValue() {
29 Expect.equals(millisecondsSinceEpoch, dt2.millisecondsSinceEpoch); 25 var dt1 = new DateTime.now();
26 var millisecondsSinceEpoch = dt1.millisecondsSinceEpoch;
27 var dt2 = new DateTime.fromMillisecondsSinceEpoch(millisecondsSinceEpoch);
28 Expect.equals(millisecondsSinceEpoch, dt2.millisecondsSinceEpoch);
29 }
30
31 void testFarAwayDates() {
32 DateTime dt =
33 new DateTime.fromMillisecondsSinceEpoch(1000000000000001, isUtc: true);
34 Expect.equals(33658, dt.year);
35 Expect.equals(9, dt.month);
36 Expect.equals(27, dt.day);
37 Expect.equals(1, dt.hour);
38 Expect.equals(46, dt.minute);
39 Expect.equals(40, dt.second);
40 Expect.equals(1, dt.millisecond);
41 dt = new DateTime.fromMillisecondsSinceEpoch(-1000000000000001, isUtc: true);
42 Expect.equals(-29719, dt.year);
43 Expect.equals(4, dt.month);
44 Expect.equals(5, dt.day);
45 Expect.equals(22, dt.hour);
46 Expect.equals(13, dt.minute);
47 Expect.equals(19, dt.second);
48 Expect.equals(999, dt.millisecond);
49 // Same with local zone.
50 dt = new DateTime.fromMillisecondsSinceEpoch(1000000000000001);
51 Expect.equals(33658, dt.year);
52 Expect.equals(9, dt.month);
53 Expect.equals(true, dt.day == 27 || dt.day == 26);
54 // Not much we can test for local hour.
55 Expect.equals(true, dt.hour >= 0 && dt.hour < 24);
56 // Timezones can have offsets down to 15 minute.
57 Expect.equals(true, dt.minute % 15 == 46 % 15);
58 Expect.equals(40, dt.second);
59 Expect.equals(1, dt.millisecond);
60 dt = new DateTime.fromMillisecondsSinceEpoch(-1000000000000001);
61 Expect.equals(-29719, dt.year);
62 Expect.equals(4, dt.month);
63 Expect.equals(true, 5 == dt.day || 6 == dt.day);
64 // Not much we can test for local hour.
65 Expect.equals(true, dt.hour >= 0 && dt.hour < 24);
66 // Timezones can have offsets down to 15 minute.
67 Expect.equals(true, dt.minute % 15 == 13);
68 Expect.equals(19, dt.second);
69 Expect.equals(999, dt.millisecond);
70 }
71
72 void testEquivalentYears() {
73 // All hardcoded values come from V8. This means that the values are not
74 // necessarily correct (see limitations of DateTime object in
75 // EcmaScript 15.9.1 and in particular 15.9.1.8/9).
76 DateTime dt = new DateTime.fromMillisecondsSinceEpoch(-31485600000, isUtc: tru e);
77 Expect.equals(1969, dt.year);
78 Expect.equals(1, dt.month);
79 Expect.equals(1, dt.day);
80 Expect.equals(14, dt.hour);
81 Expect.equals(0, dt.minute);
82 Expect.equals(0, dt.second);
83 Expect.equals(0, dt.millisecond);
84 dt = new DateTime.fromMillisecondsSinceEpoch(-63108000000, isUtc: true);
85 Expect.equals(1968, dt.year);
86 Expect.equals(1, dt.month);
87 Expect.equals(1, dt.day);
88 Expect.equals(14, dt.hour);
89 Expect.equals(0, dt.minute);
90 Expect.equals(0, dt.second);
91 Expect.equals(0, dt.millisecond);
92 dt = new DateTime.fromMillisecondsSinceEpoch(-94644000000, isUtc: true);
93 Expect.equals(1967, dt.year);
94 Expect.equals(1, dt.month);
95 Expect.equals(1, dt.day);
96 Expect.equals(14, dt.hour);
97 Expect.equals(0, dt.minute);
98 Expect.equals(0, dt.second);
99 Expect.equals(0, dt.millisecond);
100 dt = new DateTime.fromMillisecondsSinceEpoch(-126180000000, isUtc: true);
101 Expect.equals(1966, dt.year);
102 Expect.equals(1, dt.month);
103 Expect.equals(1, dt.day);
104 Expect.equals(14, dt.hour);
105 Expect.equals(0, dt.minute);
106 Expect.equals(0, dt.second);
107 Expect.equals(0, dt.millisecond);
108 dt = new DateTime.fromMillisecondsSinceEpoch(-157716000000, isUtc: true);
109 Expect.equals(1965, dt.year);
110 Expect.equals(1, dt.month);
111 Expect.equals(1, dt.day);
112 Expect.equals(14, dt.hour);
113 Expect.equals(0, dt.minute);
114 Expect.equals(0, dt.second);
115 Expect.equals(0, dt.millisecond);
116 dt = new DateTime.fromMillisecondsSinceEpoch(-2177402400000, isUtc: true);
117 Expect.equals(1901, dt.year);
118 Expect.equals(1, dt.month);
119 Expect.equals(1, dt.day);
120 Expect.equals(14, dt.hour);
121 Expect.equals(0, dt.minute);
122 Expect.equals(0, dt.second);
123 Expect.equals(0, dt.millisecond);
124 dt = new DateTime.fromMillisecondsSinceEpoch(-5333076000000, isUtc: true);
125 Expect.equals(1801, dt.year);
126 Expect.equals(1, dt.month);
127 Expect.equals(1, dt.day);
128 Expect.equals(14, dt.hour);
129 Expect.equals(0, dt.minute);
130 Expect.equals(0, dt.second);
131 Expect.equals(0, dt.millisecond);
132 dt = new DateTime.fromMillisecondsSinceEpoch(-8520285600000, isUtc: true);
133 Expect.equals(1700, dt.year);
134 Expect.equals(1, dt.month);
135 Expect.equals(1, dt.day);
136 Expect.equals(14, dt.hour);
137 Expect.equals(0, dt.minute);
138 Expect.equals(0, dt.second);
139 Expect.equals(0, dt.millisecond);
140 dt = new DateTime.fromMillisecondsSinceEpoch(-14831719200000, isUtc: true);
141 Expect.equals(1500, dt.year);
142 Expect.equals(1, dt.month);
143 Expect.equals(1, dt.day);
144 Expect.equals(14, dt.hour);
145 Expect.equals(0, dt.minute);
146 Expect.equals(0, dt.second);
147 Expect.equals(0, dt.millisecond);
148 dt = new DateTime.fromMillisecondsSinceEpoch(-59011408800000, isUtc: true);
149 Expect.equals(100, dt.year);
150 Expect.equals(1, dt.month);
151 Expect.equals(1, dt.day);
152 Expect.equals(14, dt.hour);
153 Expect.equals(0, dt.minute);
154 Expect.equals(0, dt.second);
155 Expect.equals(0, dt.millisecond);
156 dt = new DateTime.fromMillisecondsSinceEpoch(-62011408800000, isUtc: true);
157 Expect.equals(4, dt.year);
158 Expect.equals(12, dt.month);
159 Expect.equals(8, dt.day);
160 Expect.equals(8, dt.hour);
161 Expect.equals(40, dt.minute);
162 Expect.equals(0, dt.second);
163 Expect.equals(0, dt.millisecond);
164 dt = new DateTime.fromMillisecondsSinceEpoch(-64011408800000, isUtc: true);
165 Expect.equals(-59, dt.year);
166 Expect.equals(7, dt.month);
167 Expect.equals(24, dt.day);
168 Expect.equals(5, dt.hour);
169 Expect.equals(6, dt.minute);
170 Expect.equals(40, dt.second);
171 Expect.equals(0, dt.millisecond);
172 final int SECONDS_YEAR_2035 = 2051222400;
173 dt = new DateTime.fromMillisecondsSinceEpoch(SECONDS_YEAR_2035 * 1000 + 1,
174 isUtc: true);
175 Expect.equals(2035, dt.year);
176 Expect.equals(1, dt.month);
177 Expect.equals(1, dt.day);
178 Expect.equals(0, dt.hour);
179 Expect.equals(0, dt.minute);
180 Expect.equals(0, dt.second);
181 Expect.equals(1, dt.millisecond);
182 dt = new DateTime.fromMillisecondsSinceEpoch(SECONDS_YEAR_2035 * 1000 - 1,
183 isUtc: true);
184 Expect.equals(2034, dt.year);
185 Expect.equals(12, dt.month);
186 Expect.equals(31, dt.day);
187 Expect.equals(23, dt.hour);
188 Expect.equals(59, dt.minute);
189 Expect.equals(59, dt.second);
190 Expect.equals(999, dt.millisecond);
191 dt = new DateTime.utc(2035, 1, 1, 0, 0, 0, 1);
192 Expect.equals(SECONDS_YEAR_2035 * 1000 + 1, dt.millisecondsSinceEpoch);
193 dt = new DateTime.utc(2034, 12, 31, 23, 59, 59, 999);
194 Expect.equals(SECONDS_YEAR_2035 * 1000 - 1, dt.millisecondsSinceEpoch);
195 dt = new DateTime.fromMillisecondsSinceEpoch(SECONDS_YEAR_2035 * 1000 + 1);
196 Expect.equals(true, (2035 == dt.year && 1 == dt.month && 1 == dt.day) ||
197 (2034 == dt.year && 12 == dt.month && 31 == dt.day));
198 Expect.equals(0, dt.second);
199 Expect.equals(1, dt.millisecond);
200 DateTime dt2 = new DateTime(
201 dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second,
202 dt.millisecond);
203 Expect.equals(dt.millisecondsSinceEpoch, dt2.millisecondsSinceEpoch);
204 dt = new DateTime.fromMillisecondsSinceEpoch(SECONDS_YEAR_2035 * 1000 - 1);
205 Expect.equals(true, (2035 == dt.year && 1 == dt.month && 1 == dt.day) ||
206 (2034 == dt.year && 12 == dt.month && 31 == dt.day));
207 Expect.equals(59, dt.second);
208 Expect.equals(999, dt.millisecond);
209 dt2 = new DateTime(
210 dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second,
211 dt.millisecond);
212 Expect.equals(dt.millisecondsSinceEpoch, dt2.millisecondsSinceEpoch);
213 dt = new DateTime.fromMillisecondsSinceEpoch(2100000000 * 1000, isUtc: true);
214 Expect.equals(2036, dt.year);
215 Expect.equals(7, dt.month);
216 Expect.equals(18, dt.day);
217 Expect.equals(13, dt.hour);
218 Expect.equals(20, dt.minute);
219 Expect.equals(0, dt.second);
220 Expect.equals(0, dt.millisecond);
221 // Internally this will use the maximum value for the native calls.
222 dt = new DateTime(2036, 7, 18, 13, 20);
223 Expect.equals(2036, dt.year);
224 Expect.equals(7, dt.month);
225 Expect.equals(18, dt.day);
226 Expect.equals(13, dt.hour);
227 Expect.equals(20, dt.minute);
228 Expect.equals(0, dt.second);
229 Expect.equals(0, dt.millisecond);
230 Expect.equals("2036-07-18 13:20:00.000", dt.toString());
231 }
232
233 void testExtremes() {
234 var dt =
235 new DateTime.fromMillisecondsSinceEpoch(8640000000000000, isUtc: true);
236 Expect.equals(275760, dt.year);
237 Expect.equals(9, dt.month);
238 Expect.equals(13, dt.day);
239 Expect.equals(0, dt.hour);
240 Expect.equals(0, dt.minute);
241 Expect.equals(0, dt.second);
242 Expect.equals(0, dt.millisecond);
243 dt = new DateTime.fromMillisecondsSinceEpoch(-8640000000000000, isUtc: true);
244 Expect.equals(-271821, dt.year);
245 Expect.equals(4, dt.month);
246 Expect.equals(20, dt.day);
247 Expect.equals(0, dt.hour);
248 Expect.equals(0, dt.minute);
249 Expect.equals(0, dt.second);
250 Expect.equals(0, dt.millisecond);
251 // Make sure that we can build the extreme dates in local too.
252 dt = new DateTime.fromMillisecondsSinceEpoch(8640000000000000);
253 dt = new DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute);
254 Expect.equals(8640000000000000, dt.millisecondsSinceEpoch);
255 dt = new DateTime.fromMillisecondsSinceEpoch(-8640000000000000);
256 dt = new DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute);
257 Expect.equals(-8640000000000000, dt.millisecondsSinceEpoch);
258 Expect.throws(() => new DateTime.fromMillisecondsSinceEpoch(8640000000000001,
259 isUtc: true));
260 Expect.throws(() => new DateTime.fromMillisecondsSinceEpoch(-8640000000000001,
261 isUtc: true));
262 Expect.throws(() => new DateTime.fromMillisecondsSinceEpoch(8640000000000001)) ;
263 Expect.throws(() => new DateTime.fromMillisecondsSinceEpoch(-8640000000000001) );
264 dt = new DateTime.fromMillisecondsSinceEpoch(8640000000000000);
265 Expect.throws(() => new DateTime(dt.year, dt.month, dt.day,
266 dt.hour, dt.minute, 0, 1));
267 dt = new DateTime.fromMillisecondsSinceEpoch(8640000000000000, isUtc: true);
268 Expect.throws(() => new DateTime.utc(dt.year, dt.month, dt.day,
269 dt.hour, dt.minute, 0, 1));
270 dt = new DateTime.fromMillisecondsSinceEpoch(-8640000000000000);
271 Expect.throws(() => new DateTime(dt.year, dt.month, dt.day,
272 dt.hour, dt.minute, 0, -1));
273 dt = new DateTime.fromMillisecondsSinceEpoch(-8640000000000000, isUtc: true);
274 Expect.throws(() => new DateTime.utc(dt.year, dt.month, dt.day,
275 dt.hour, dt.minute, 0, -1));
276 }
277
278 void testUTCGetters() {
279 var dt = new DateTime.fromMillisecondsSinceEpoch(1305140315000, isUtc: true);
280 Expect.equals(2011, dt.year);
281 Expect.equals(5, dt.month);
282 Expect.equals(11, dt.day);
283 Expect.equals(18, dt.hour);
284 Expect.equals(58, dt.minute);
285 Expect.equals(35, dt.second);
286 Expect.equals(0, dt.millisecond);
287 Expect.equals(true, dt.isUtc);
288 Expect.equals(1305140315000, dt.millisecondsSinceEpoch);
289 dt = new DateTime.fromMillisecondsSinceEpoch(-9999999, isUtc: true);
290 Expect.equals(1969, dt.year);
291 Expect.equals(12, dt.month);
292 Expect.equals(31, dt.day);
293 Expect.equals(21, dt.hour);
294 Expect.equals(13, dt.minute);
295 Expect.equals(20, dt.second);
296 Expect.equals(1, dt.millisecond);
297 }
298
299 void testLocalGetters() {
300 var dt1 = new DateTime.fromMillisecondsSinceEpoch(1305140315000);
301 var dt2 = new DateTime.utc(dt1.year, dt1.month, dt1.day,
302 dt1.hour, dt1.minute, dt1.second, dt1.millisecond);
303 Duration zoneOffset = dt1.difference(dt2);
304 Expect.equals(true, zoneOffset.inDays == 0);
305 Expect.equals(true, zoneOffset.inHours.abs() <= 12);
306 Expect.equals(dt1.year, dt2.year);
307 Expect.equals(dt1.month, dt2.month);
308 Expect.equals(true, (dt1.day - dt2.day).abs() <= 1);
309 Expect.equals(true, dt1.hour < 24);
310 // There are timezones with 0.5 or 0.25 hour offsets.
311 Expect.equals(true,
312 (dt1.minute == dt2.minute) ||
313 ((dt1.minute - dt2.minute).abs() == 30) ||
314 ((dt1.minute - dt2.minute).abs() == 15));
315 Expect.equals(dt1.second, dt2.second);
316 Expect.equals(dt1.millisecond, dt2.millisecond);
317 }
318
319 void testConstructors() {
320 var dt0 = new DateTime.utc(2011, 5, 11, 18, 58, 35, 0);
321 var dt0b = new DateTime.utc(2011, 5, 11, 18, 58, 35, 0).toLocal();
322 Expect.equals(1305140315000, dt0.millisecondsSinceEpoch);
323 var dt1 = new DateTime.fromMillisecondsSinceEpoch(1305140315000);
324 Expect.equals(dt1.millisecondsSinceEpoch, dt0.millisecondsSinceEpoch);
325 Expect.equals(false, dt1 == dt0);
326 Expect.equals(true, dt1 == dt0b);
327 var dt3 = new DateTime(dt1.year, dt1.month, dt1.day, dt1.hour, dt1.minute,
328 dt1.second, dt1.millisecond);
329 Expect.equals(dt1.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch);
330 Expect.equals(false, dt3 == dt0);
331 Expect.equals(true, dt1 == dt3);
332 dt3 = new DateTime(
333 dt1.year, dt1.month, dt1.day, dt1.hour, dt1.minute,
334 dt1.second, dt1.millisecond);
335 Expect.equals(dt1.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch);
336 Expect.equals(true, dt1 == dt3);
337 var dt2 = dt1.toLocal();
338 dt3 = new DateTime(2011, 5, dt1.day, dt1.hour, dt1.minute, 35, 0);
339 Expect.equals(dt2.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch);
340 Expect.equals(true, dt2 == dt3);
341 dt1 = new DateTime.fromMillisecondsSinceEpoch(-9999999, isUtc: true);
342 dt3 = new DateTime.utc(dt1.year, dt1.month, dt1.day, dt1.hour, dt1.minute,
343 dt1.second, dt1.millisecond);
344 Expect.equals(dt1.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch);
345 dt3 = new DateTime.utc(99, 1, 2, 10, 11, 12, 0);
346 Expect.equals(99, dt3.year);
347 Expect.equals(1, dt3.month);
348 Expect.equals(2, dt3.day);
349 Expect.equals(10, dt3.hour);
350 Expect.equals(11, dt3.minute);
351 Expect.equals(12, dt3.second);
352 Expect.equals(0, dt3.millisecond);
353 Expect.equals(true, dt3.isUtc);
354 var dt4 = new DateTime(99, 1, 2);
355 Expect.equals(99, dt4.year);
356 Expect.equals(1, dt4.month);
357 Expect.equals(2, dt4.day);
358 Expect.equals(0, dt4.hour);
359 Expect.equals(0, dt4.minute);
360 Expect.equals(0, dt4.second);
361 Expect.equals(0, dt4.millisecond);
362 Expect.isFalse(dt4.isUtc);
363 var dt5 = new DateTime.utc(99, 1, 2);
364 Expect.equals(99, dt5.year);
365 Expect.equals(1, dt5.month);
366 Expect.equals(2, dt5.day);
367 Expect.equals(0, dt5.hour);
368 Expect.equals(0, dt5.minute);
369 Expect.equals(0, dt5.second);
370 Expect.equals(0, dt5.millisecond);
371 Expect.isTrue(dt5.isUtc);
372 var dt6 = new DateTime(2012, 2, 27, 13, 27, 0);
373 Expect.equals(2012, dt6.year);
374 Expect.equals(2, dt6.month);
375 Expect.equals(27, dt6.day);
376 Expect.equals(13, dt6.hour);
377 Expect.equals(27, dt6.minute);
378 Expect.equals(0, dt6.second);
379 Expect.equals(0, dt6.millisecond);
380 Expect.isFalse(dt6.isUtc);
381 var dt7 = new DateTime.utc(2012, 2, 27, 13, 27, 0);
382 Expect.equals(2012, dt7.year);
383 Expect.equals(2, dt7.month);
384 Expect.equals(27, dt7.day);
385 Expect.equals(13, dt7.hour);
386 Expect.equals(27, dt7.minute);
387 Expect.equals(0, dt7.second);
388 Expect.equals(0, dt7.millisecond);
389 Expect.isTrue(dt7.isUtc);
390 }
391
392 void testChangeTimeZone() {
393 var dt1 = new DateTime.fromMillisecondsSinceEpoch(1305140315000);
394 var dt2 = dt1.toUtc();
395 Expect.equals(dt1.millisecondsSinceEpoch, dt2.millisecondsSinceEpoch);
396 var dt3 = new DateTime.fromMillisecondsSinceEpoch(1305140315000, isUtc: true);
397 Expect.equals(dt1.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch);
398 Expect.equals(dt2.year, dt3.year);
399 Expect.equals(dt2.month, dt3.month);
400 Expect.equals(dt2.day, dt3.day);
401 Expect.equals(dt2.hour, dt3.hour);
402 Expect.equals(dt2.minute, dt3.minute);
403 Expect.equals(dt2.second, dt3.second);
404 Expect.equals(dt2.millisecond, dt3.millisecond);
405 var dt4 = dt3.toLocal();
406 Expect.equals(dt1.year, dt4.year);
407 Expect.equals(dt1.month, dt4.month);
408 Expect.equals(dt1.day, dt4.day);
409 Expect.equals(dt1.hour, dt4.hour);
410 Expect.equals(dt1.minute, dt4.minute);
411 Expect.equals(dt1.second, dt4.second);
412 Expect.equals(dt1.millisecond, dt4.millisecond);
413 }
414
415 void testSubAdd() {
416 var dt1 = new DateTime.fromMillisecondsSinceEpoch(1305140315000, isUtc: true);
417 var dt2 = dt1.add(new Duration(milliseconds:
418 3 * Duration.MILLISECONDS_PER_SECOND + 5));
419 Expect.equals(dt1.year, dt2.year);
420 Expect.equals(dt1.month, dt2.month);
421 Expect.equals(dt1.day, dt2.day);
422 Expect.equals(dt1.hour, dt2.hour);
423 Expect.equals(dt1.minute, dt2.minute);
424 Expect.equals(dt1.second + 3, dt2.second);
425 Expect.equals(dt1.millisecond + 5, dt2.millisecond);
426 var dt3 = dt2.subtract(new Duration(milliseconds:
427 3 * Duration.MILLISECONDS_PER_SECOND + 5));
428 Expect.equals(true, dt1 == dt3);
429 Expect.equals(false, dt1 == dt2);
430 }
431
432 void testUnderflowAndOverflow() {
433 final dtBase = new DateTime(2012, 6, 20, 12, 30, 30, 500);
434
435 // Millisecond
436 print(" >>> Millisecond+");
437 var dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour,
438 dtBase.minute, dtBase.second, 1000);
439 Expect.equals(dtBase.year, dt.year);
440 Expect.equals(dtBase.month, dt.month);
441 Expect.equals(dtBase.day, dt.day);
442 Expect.equals(dtBase.hour, dt.hour);
443 Expect.equals(dtBase.minute, dt.minute);
444 Expect.equals(dtBase.second + 1, dt.second);
445 Expect.equals(0, dt.millisecond);
446
447 print(" >>> Millisecond-");
448 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour,
449 dtBase.minute, dtBase.second, -1000);
450 Expect.equals(dtBase.year, dt.year);
451 Expect.equals(dtBase.month, dt.month);
452 Expect.equals(dtBase.day, dt.day);
453 Expect.equals(dtBase.hour, dt.hour);
454 Expect.equals(dtBase.minute, dt.minute);
455 Expect.equals(dtBase.second - 1, dt.second);
456 Expect.equals(0, dt.millisecond);
457
458 // Second
459 print(" >>> Second+");
460 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour,
461 dtBase.minute, 60, dtBase.millisecond);
462 Expect.equals(dtBase.year, dt.year);
463 Expect.equals(dtBase.month, dt.month);
464 Expect.equals(dtBase.day, dt.day);
465 Expect.equals(dtBase.hour, dt.hour);
466 Expect.equals(dtBase.minute + 1, dt.minute);
467 Expect.equals(0, dt.second);
468 Expect.equals(dtBase.millisecond, dt.millisecond);
469
470 print(" >>> Second-");
471 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour,
472 dtBase.minute, -60, dtBase.millisecond);
473 Expect.equals(dtBase.year, dt.year);
474 Expect.equals(dtBase.month, dt.month);
475 Expect.equals(dtBase.day, dt.day);
476 Expect.equals(dtBase.hour, dt.hour);
477 Expect.equals(dtBase.minute - 1, dt.minute);
478 Expect.equals(0, dt.second);
479 Expect.equals(dtBase.millisecond, dt.millisecond);
480
481 // Minute
482 print(" >>> Minute+");
483 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour, 60,
484 dtBase.second, dtBase.millisecond);
485 Expect.equals(dtBase.year, dt.year);
486 Expect.equals(dtBase.month, dt.month);
487 Expect.equals(dtBase.day, dt.day);
488 Expect.equals(dtBase.hour + 1, dt.hour);
489 Expect.equals(0, dt.minute);
490 Expect.equals(dtBase.second, dt.second);
491 Expect.equals(dtBase.millisecond, dt.millisecond);
492
493 print(" >>> Minute-");
494 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour, -60,
495 dtBase.second, dtBase.millisecond);
496 Expect.equals(dtBase.year, dt.year);
497 Expect.equals(dtBase.month, dt.month);
498 Expect.equals(dtBase.day, dt.day);
499 Expect.equals(dtBase.hour - 1, dt.hour);
500 Expect.equals(0, dt.minute);
501 Expect.equals(dtBase.second, dt.second);
502 Expect.equals(dtBase.millisecond, dt.millisecond);
503
504 // Hour
505 print(" >>> Hour+");
506 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, 24, dtBase.minute,
507 dtBase.second, dtBase.millisecond);
508 Expect.equals(dtBase.year, dt.year);
509 Expect.equals(dtBase.month, dt.month);
510 Expect.equals(dtBase.day + 1, dt.day);
511 Expect.equals(0, dt.hour);
512 Expect.equals(dtBase.minute, dt.minute);
513 Expect.equals(dtBase.second, dt.second);
514 Expect.equals(dtBase.millisecond, dt.millisecond);
515
516 print(" >>> Hour-");
517 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, -24, dtBase.minute,
518 dtBase.second, dtBase.millisecond);
519 Expect.equals(dtBase.year, dt.year);
520 Expect.equals(dtBase.month, dt.month);
521 Expect.equals(dtBase.day - 1, dt.day);
522 Expect.equals(0, dt.hour);
523 Expect.equals(dtBase.minute, dt.minute);
524 Expect.equals(dtBase.second, dt.second);
525 Expect.equals(dtBase.millisecond, dt.millisecond);
526
527 // Day
528 print(" >>> Day+");
529 dt = new DateTime(dtBase.year, dtBase.month, 31, dtBase.hour, dtBase.minute,
530 dtBase.second, dtBase.millisecond);
531 Expect.equals(dtBase.year, dt.year);
532 Expect.equals(dtBase.month + 1, dt.month);
533 Expect.equals(1, dt.day);
534 Expect.equals(dtBase.hour, dt.hour);
535 Expect.equals(dtBase.minute, dt.minute);
536 Expect.equals(dtBase.second, dt.second);
537 Expect.equals(dtBase.millisecond, dt.millisecond);
538
539 print(" >>> Day-");
540 dt = new DateTime(dtBase.year, dtBase.month, -30, dtBase.hour, dtBase.minute,
541 dtBase.second, dtBase.millisecond);
542 Expect.equals(dtBase.year, dt.year);
543 Expect.equals(dtBase.month - 1, dt.month);
544 Expect.equals(1, dt.day);
545 Expect.equals(dtBase.hour, dt.hour);
546 Expect.equals(dtBase.minute, dt.minute);
547 Expect.equals(dtBase.second, dt.second);
548 Expect.equals(dtBase.millisecond, dt.millisecond);
549
550 // Month
551 print(" >>> Month+");
552 dt = new DateTime(dtBase.year, 13, dtBase.day, dtBase.hour, dtBase.minute,
553 dtBase.second, dtBase.millisecond);
554 Expect.equals(dtBase.year + 1, dt.year);
555 Expect.equals(1, dt.month);
556 Expect.equals(dtBase.day, dt.day);
557 Expect.equals(dtBase.hour, dt.hour);
558 Expect.equals(dtBase.minute, dt.minute);
559 Expect.equals(dtBase.second, dt.second);
560 Expect.equals(dtBase.millisecond, dt.millisecond);
561
562 print(" >>> Month-");
563 dt = new DateTime(dtBase.year, -11, dtBase.day, dtBase.hour, dtBase.minute,
564 dtBase.second, dtBase.millisecond);
565 Expect.equals(dtBase.year - 1, dt.year);
566 Expect.equals(1, dt.month);
567 Expect.equals(dtBase.day, dt.day);
568 Expect.equals(dtBase.hour, dt.hour);
569 Expect.equals(dtBase.minute, dt.minute);
570 Expect.equals(dtBase.second, dt.second);
571 Expect.equals(dtBase.millisecond, dt.millisecond);
572
573 // Flowing all the way up the chain.
574 print(" >>> Flow+");
575 var dtBase1 = new DateTime(2012, 12, 31, 23, 59, 59, 999);
576 var dtTick = new DateTime(dtBase1.year, dtBase1.month, dtBase1.day,
577 dtBase1.hour, dtBase1.minute, dtBase1.second,
578 dtBase1.millisecond + 1);
579 Expect.equals(dtBase1.year + 1, dtTick.year);
580 Expect.equals(1, dtTick.month);
581 Expect.equals(1, dtTick.day);
582 Expect.equals(0, dtTick.hour);
583 Expect.equals(0, dtTick.minute);
584 Expect.equals(0, dtTick.second);
585 Expect.equals(0, dtTick.millisecond);
586
587 print(" >>> Flow-");
588 dtBase1 = new DateTime(2012, 1, 1, 0, 0, 0, 0);
589 dtTick = new DateTime(dtBase1.year, dtBase1.month, dtBase1.day, dtBase1.hour,
590 dtBase1.minute, dtBase1.second, dtBase1.millisecond - 1);
591 Expect.equals(dtBase1.year - 1, dtTick.year);
592 Expect.equals(12, dtTick.month);
593 Expect.equals(31, dtTick.day);
594 Expect.equals(23, dtTick.hour);
595 Expect.equals(59, dtTick.minute);
596 Expect.equals(59, dtTick.second);
597 Expect.equals(999, dtTick.millisecond);
598
599 print(" >>> extra underflow");
600 dtTick = new DateTime(dtBase1.year, dtBase1.month, dtBase1.day, -17520,
601 dtBase1.minute, dtBase1.second, dtBase1.millisecond);
602 Expect.equals(dtBase1.year - 2, dtTick.year);
603 Expect.equals(dtBase1.month, dtTick.month);
604 Expect.equals(dtBase1.day, dtTick.day);
605 Expect.equals(dtBase1.hour, dtTick.hour);
606 Expect.equals(dtBase1.minute, dtTick.minute);
607 Expect.equals(dtBase1.second, dtTick.second);
608 Expect.equals(dtBase1.millisecond, dtTick.millisecond);
609 }
610
611 void testDateStrings() {
612 // TODO(floitsch): Clean up the DateTime API that deals with strings.
613 var dt1 = DateTime.parse("2011-05-11 18:58:35Z");
614 Expect.equals(1305140315000, dt1.millisecondsSinceEpoch);
615 Expect.isTrue(dt1.isUtc);
616 dt1 = DateTime.parse("20110511 18:58:35z");
617 Expect.equals(1305140315000, dt1.millisecondsSinceEpoch);
618 Expect.isTrue(dt1.isUtc);
619 dt1 = DateTime.parse("+20110511 18:58:35z");
620 Expect.equals(1305140315000, dt1.millisecondsSinceEpoch);
621 Expect.isTrue(dt1.isUtc);
622 var str = dt1.toString();
623 var dt2 = DateTime.parse(str);
624 Expect.equals(true, dt1 == dt2);
625 var dt3 = dt1.toUtc();
626 str = dt3.toString();
627 Expect.equals("2011-05-11 18:58:35.000Z", str);
628 var dt4 = DateTime.parse("-1234-01-01 00:00:00Z");
629 Expect.equals(-1234, dt4.year);
630 Expect.equals(1, dt4.month);
631 Expect.equals(1, dt4.day);
632 Expect.equals(0, dt4.hour);
633 Expect.equals(0, dt4.minute);
634 Expect.equals(0, dt4.second);
635 Expect.equals(0, dt4.millisecond);
636 Expect.isTrue(dt4.isUtc);
637 var dt5 = DateTime.parse("0099-01-02");
638 Expect.equals(99, dt5.year);
639 Expect.equals(1, dt5.month);
640 Expect.equals(2, dt5.day);
641 Expect.equals(0, dt5.hour);
642 Expect.equals(0, dt5.minute);
643 Expect.equals(0, dt5.second);
644 Expect.equals(0, dt5.millisecond);
645 Expect.isFalse(dt5.isUtc);
646 var dt6 = DateTime.parse("2012-01-01 00:00:10.012");
647 Expect.equals(12, dt6.millisecond);
648 dt6 = DateTime.parse("2012-01-01 00:00:10.003");
649 Expect.equals(3, dt6.millisecond);
650 dt6 = DateTime.parse("2012-01-01 00:00:10.5");
651 Expect.equals(500, dt6.millisecond);
652 dt6 = DateTime.parse("2012-01-01 00:00:10.003Z");
653 Expect.equals(3, dt6.millisecond);
654 dt6 = DateTime.parse("2012-01-01 00:00:10.5z");
655 Expect.equals(500, dt6.millisecond);
656 var dt7 = DateTime.parse("2011-05-11T18:58:35Z");
657 Expect.equals(1305140315000, dt7.millisecondsSinceEpoch);
658 var dt8 = DateTime.parse("-1234-01-01T00:00:00Z");
659 Expect.equals(-1234, dt8.year);
660 Expect.equals(1, dt8.month);
661 Expect.equals(1, dt8.day);
662 Expect.equals(0, dt8.hour);
663 Expect.equals(0, dt8.minute);
664 Expect.equals(0, dt8.second);
665 Expect.equals(0, dt8.millisecond);
666 Expect.isTrue(dt8.isUtc);
667 var dt9 = DateTime.parse("-1234-01-01T00:00:00");
668 Expect.equals(-1234, dt9.year);
669 Expect.equals(1, dt9.month);
670 Expect.equals(1, dt9.day);
671 Expect.equals(0, dt9.hour);
672 Expect.equals(0, dt9.minute);
673 Expect.equals(0, dt9.second);
674 Expect.equals(0, dt9.millisecond);
675 Expect.isFalse(dt9.isUtc);
676 var dt10 = DateTime.parse("-12340101");
677 Expect.equals(-1234, dt10.year);
678 Expect.equals(1, dt10.month);
679 Expect.equals(1, dt10.day);
680 Expect.equals(0, dt10.hour);
681 Expect.equals(0, dt10.minute);
682 Expect.equals(0, dt10.second);
683 Expect.equals(0, dt10.millisecond);
684 Expect.isFalse(dt10.isUtc);
685 dt1 = DateTime.parse("2012-02-27 13:27:00");
686 Expect.equals(2012, dt1.year);
687 Expect.equals(2, dt1.month);
688 Expect.equals(27, dt1.day);
689 Expect.equals(13, dt1.hour);
690 Expect.equals(27, dt1.minute);
691 Expect.equals(0, dt1.second);
692 Expect.equals(0, dt1.millisecond);
693 Expect.equals(false, dt1.isUtc);
694 dt1 = DateTime.parse("2012-02-27 13:27:00.423z");
695 Expect.equals(2012, dt1.year);
696 Expect.equals(2, dt1.month);
697 Expect.equals(27, dt1.day);
698 Expect.equals(13, dt1.hour);
699 Expect.equals(27, dt1.minute);
700 Expect.equals(0, dt1.second);
701 Expect.equals(423, dt1.millisecond);
702 Expect.equals(true, dt1.isUtc);
703 dt1 = DateTime.parse("20120227 13:27:00");
704 Expect.equals(2012, dt1.year);
705 Expect.equals(2, dt1.month);
706 Expect.equals(27, dt1.day);
707 Expect.equals(13, dt1.hour);
708 Expect.equals(27, dt1.minute);
709 Expect.equals(0, dt1.second);
710 Expect.equals(0, dt1.millisecond);
711 Expect.equals(false, dt1.isUtc);
712 dt1 = DateTime.parse("20120227T132700");
713 Expect.equals(2012, dt1.year);
714 Expect.equals(2, dt1.month);
715 Expect.equals(27, dt1.day);
716 Expect.equals(13, dt1.hour);
717 Expect.equals(27, dt1.minute);
718 Expect.equals(0, dt1.second);
719 Expect.equals(0, dt1.millisecond);
720 Expect.equals(false, dt1.isUtc);
721 dt1 = DateTime.parse("20120227");
722 Expect.equals(2012, dt1.year);
723 Expect.equals(2, dt1.month);
724 Expect.equals(27, dt1.day);
725 Expect.equals(0, dt1.hour);
726 Expect.equals(0, dt1.minute);
727 Expect.equals(0, dt1.second);
728 Expect.equals(0, dt1.millisecond);
729 Expect.equals(false, dt1.isUtc);
730 dt1 = DateTime.parse("2012-02-27T14Z");
731 Expect.equals(2012, dt1.year);
732 Expect.equals(2, dt1.month);
733 Expect.equals(27, dt1.day);
734 Expect.equals(14, dt1.hour);
735 Expect.equals(0, dt1.minute);
736 Expect.equals(0, dt1.second);
737 Expect.equals(0, dt1.millisecond);
738 Expect.equals(true, dt1.isUtc);
739 dt1 = DateTime.parse("-123450101 00:00:00 Z");
740 Expect.equals(-12345, dt1.year);
741 Expect.equals(1, dt1.month);
742 Expect.equals(1, dt1.day);
743 Expect.equals(0, dt1.hour);
744 Expect.equals(0, dt1.minute);
745 Expect.equals(0, dt1.second);
746 Expect.equals(0, dt1.millisecond);
747 Expect.equals(true, dt1.isUtc);
748 // We only support millisecond. If the user supplies more data (the "51"
749 // here), we round.
750 // If (eventually) we support more than just millisecond this test could
751 // fail. Please update the test in this case.
752 dt1 = DateTime.parse("1999-01-02 23:59:59.99951");
753 Expect.equals(1999, dt1.year);
754 Expect.equals(1, dt1.month);
755 Expect.equals(3, dt1.day);
756 Expect.equals(0, dt1.hour);
757 Expect.equals(0, dt1.minute);
758 Expect.equals(0, dt1.second);
759 Expect.equals(0, dt1.millisecond);
760 Expect.equals(false, dt1.isUtc);
761 dt1 = DateTime.parse("1999-01-02 23:58:59.99951Z");
762 Expect.equals(1999, dt1.year);
763 Expect.equals(1, dt1.month);
764 Expect.equals(2, dt1.day);
765 Expect.equals(23, dt1.hour);
766 Expect.equals(59, dt1.minute);
767 Expect.equals(0, dt1.second);
768 Expect.equals(0, dt1.millisecond);
769 Expect.equals(true, dt1.isUtc);
770 dt1 = DateTime.parse("0009-09-09 09:09:09.009Z");
771 Expect.equals(9, dt1.year);
772 Expect.equals(9, dt1.month);
773 Expect.equals(9, dt1.day);
774 Expect.equals(9, dt1.hour);
775 Expect.equals(9, dt1.minute);
776 Expect.equals(9, dt1.second);
777 Expect.equals(9, dt1.millisecond);
778 Expect.equals(true, dt1.isUtc);
779 }
780
781 void testWeekday() {
782 // 2011-10-06 is Summertime.
783 var d = new DateTime(2011, 10, 6, 0, 45, 37, 0);
784 Expect.equals(DateTime.THURSDAY, d.weekday);
785 d = new DateTime.utc(2011, 10, 6, 0, 45, 37, 0);
786 Expect.equals(DateTime.THURSDAY, d.weekday);
787 d = new DateTime(2011, 10, 5, 23, 45, 37, 0);
788 Expect.equals(DateTime.WEDNESDAY, d.weekday);
789 d = new DateTime.utc(2011, 10, 5, 23, 45, 37, 0);
790 Expect.equals(DateTime.WEDNESDAY, d.weekday);
791 // 1970-01-01 is Wintertime.
792 d = new DateTime(1970, 1, 1, 0, 0, 0, 1);
793 Expect.equals(DateTime.THURSDAY, d.weekday);
794 d = new DateTime.utc(1970, 1, 1, 0, 0, 0, 1);
795 Expect.equals(DateTime.THURSDAY, d.weekday);
796 d = new DateTime.utc(1969, 12, 31, 23, 59, 59, 999);
797 Expect.equals(DateTime.WEDNESDAY, d.weekday);
798 d = new DateTime(1969, 12, 31, 23, 59, 59, 999);
799 Expect.equals(DateTime.WEDNESDAY, d.weekday);
800 d = new DateTime(2011, 10, 4, 23, 45, 37, 0);
801 Expect.equals(DateTime.TUESDAY, d.weekday);
802 d = new DateTime(2011, 10, 3, 23, 45, 37, 0);
803 Expect.equals(DateTime.MONDAY, d.weekday);
804 d = new DateTime(2011, 10, 2, 23, 45, 37, 0);
805 Expect.equals(DateTime.SUNDAY, d.weekday);
806 d = new DateTime(2011, 10, 1, 23, 45, 37, 0);
807 Expect.equals(DateTime.SATURDAY, d.weekday);
808 d = new DateTime(2011, 9, 30, 23, 45, 37, 0);
809 Expect.equals(DateTime.FRIDAY, d.weekday);
810 }
811
812 void testToStrings() {
813 function test(date, time) {
814 { // UTC time.
815 String source1 = "$date ${time}Z";
816 String source2 = "${date}T${time}Z";
817 var utcTime1 = DateTime.parse(source1);
818 var utcTime2 = DateTime.parse(source1);
819 Expect.isTrue(utcTime1.isUtc);
820 Expect.equals(utcTime1, utcTime2);
821 Expect.equals(source1, utcTime1.toString());
822 Expect.equals(source2, utcTime1.toIso8601String());
823 }
824 { // Local time
825 String source1 = "$date $time";
826 String source2 = "${date}T$time";
827 var utcTime1 = DateTime.parse(source1);
828 var utcTime2 = DateTime.parse(source1);
829 Expect.isFalse(utcTime1.isUtc);
830 Expect.equals(utcTime1, utcTime2);
831 Expect.equals(source1, utcTime1.toString());
832 Expect.equals(source2, utcTime1.toIso8601String());
833 }
30 } 834 }
31 835 test("2000-01-01", "12:00:00.000");
32 static void testFarAwayDates() { 836 test("-2000-01-01", "12:00:00.000");
33 DateTime dt = 837 test("1970-01-01", "00:00:00.000");
34 new DateTime.fromMillisecondsSinceEpoch(1000000000000001, isUtc: true); 838 test("1969-12-31", "23:59:59.999");
35 Expect.equals(33658, dt.year); 839 }
36 Expect.equals(9, dt.month); 840
37 Expect.equals(27, dt.day); 841 void main() {
38 Expect.equals(1, dt.hour); 842 testNow();
39 Expect.equals(46, dt.minute); 843 testValue();
40 Expect.equals(40, dt.second); 844 testConstructors();
41 Expect.equals(1, dt.millisecond); 845 testUTCGetters();
42 dt = new DateTime.fromMillisecondsSinceEpoch(-1000000000000001, isUtc: true) ; 846 testLocalGetters();
43 Expect.equals(-29719, dt.year); 847 testChangeTimeZone();
44 Expect.equals(4, dt.month); 848 testSubAdd();
45 Expect.equals(5, dt.day); 849 testUnderflowAndOverflow();
46 Expect.equals(22, dt.hour); 850 testDateStrings();
47 Expect.equals(13, dt.minute); 851 testEquivalentYears();
48 Expect.equals(19, dt.second); 852 testExtremes();
49 Expect.equals(999, dt.millisecond); 853 testFarAwayDates();
50 // Same with local zone. 854 testWeekday();
51 dt = new DateTime.fromMillisecondsSinceEpoch(1000000000000001); 855 testToStrings();
52 Expect.equals(33658, dt.year); 856 }
53 Expect.equals(9, dt.month);
54 Expect.equals(true, dt.day == 27 || dt.day == 26);
55 // Not much we can test for local hour.
56 Expect.equals(true, dt.hour >= 0 && dt.hour < 24);
57 // Timezones can have offsets down to 15 minute.
58 Expect.equals(true, dt.minute % 15 == 46 % 15);
59 Expect.equals(40, dt.second);
60 Expect.equals(1, dt.millisecond);
61 dt = new DateTime.fromMillisecondsSinceEpoch(-1000000000000001);
62 Expect.equals(-29719, dt.year);
63 Expect.equals(4, dt.month);
64 Expect.equals(true, 5 == dt.day || 6 == dt.day);
65 // Not much we can test for local hour.
66 Expect.equals(true, dt.hour >= 0 && dt.hour < 24);
67 // Timezones can have offsets down to 15 minute.
68 Expect.equals(true, dt.minute % 15 == 13);
69 Expect.equals(19, dt.second);
70 Expect.equals(999, dt.millisecond);
71 }
72
73 static void testEquivalentYears() {
74 // All hardcoded values come from V8. This means that the values are not
75 // necessarily correct (see limitations of DateTime object in
76 // EcmaScript 15.9.1 and in particular 15.9.1.8/9).
77 DateTime dt = new DateTime.fromMillisecondsSinceEpoch(-31485600000, isUtc: t rue);
78 Expect.equals(1969, dt.year);
79 Expect.equals(1, dt.month);
80 Expect.equals(1, dt.day);
81 Expect.equals(14, dt.hour);
82 Expect.equals(0, dt.minute);
83 Expect.equals(0, dt.second);
84 Expect.equals(0, dt.millisecond);
85 dt = new DateTime.fromMillisecondsSinceEpoch(-63108000000, isUtc: true);
86 Expect.equals(1968, dt.year);
87 Expect.equals(1, dt.month);
88 Expect.equals(1, dt.day);
89 Expect.equals(14, dt.hour);
90 Expect.equals(0, dt.minute);
91 Expect.equals(0, dt.second);
92 Expect.equals(0, dt.millisecond);
93 dt = new DateTime.fromMillisecondsSinceEpoch(-94644000000, isUtc: true);
94 Expect.equals(1967, dt.year);
95 Expect.equals(1, dt.month);
96 Expect.equals(1, dt.day);
97 Expect.equals(14, dt.hour);
98 Expect.equals(0, dt.minute);
99 Expect.equals(0, dt.second);
100 Expect.equals(0, dt.millisecond);
101 dt = new DateTime.fromMillisecondsSinceEpoch(-126180000000, isUtc: true);
102 Expect.equals(1966, dt.year);
103 Expect.equals(1, dt.month);
104 Expect.equals(1, dt.day);
105 Expect.equals(14, dt.hour);
106 Expect.equals(0, dt.minute);
107 Expect.equals(0, dt.second);
108 Expect.equals(0, dt.millisecond);
109 dt = new DateTime.fromMillisecondsSinceEpoch(-157716000000, isUtc: true);
110 Expect.equals(1965, dt.year);
111 Expect.equals(1, dt.month);
112 Expect.equals(1, dt.day);
113 Expect.equals(14, dt.hour);
114 Expect.equals(0, dt.minute);
115 Expect.equals(0, dt.second);
116 Expect.equals(0, dt.millisecond);
117 dt = new DateTime.fromMillisecondsSinceEpoch(-2177402400000, isUtc: true);
118 Expect.equals(1901, dt.year);
119 Expect.equals(1, dt.month);
120 Expect.equals(1, dt.day);
121 Expect.equals(14, dt.hour);
122 Expect.equals(0, dt.minute);
123 Expect.equals(0, dt.second);
124 Expect.equals(0, dt.millisecond);
125 dt = new DateTime.fromMillisecondsSinceEpoch(-5333076000000, isUtc: true);
126 Expect.equals(1801, dt.year);
127 Expect.equals(1, dt.month);
128 Expect.equals(1, dt.day);
129 Expect.equals(14, dt.hour);
130 Expect.equals(0, dt.minute);
131 Expect.equals(0, dt.second);
132 Expect.equals(0, dt.millisecond);
133 dt = new DateTime.fromMillisecondsSinceEpoch(-8520285600000, isUtc: true);
134 Expect.equals(1700, dt.year);
135 Expect.equals(1, dt.month);
136 Expect.equals(1, dt.day);
137 Expect.equals(14, dt.hour);
138 Expect.equals(0, dt.minute);
139 Expect.equals(0, dt.second);
140 Expect.equals(0, dt.millisecond);
141 dt = new DateTime.fromMillisecondsSinceEpoch(-14831719200000, isUtc: true);
142 Expect.equals(1500, dt.year);
143 Expect.equals(1, dt.month);
144 Expect.equals(1, dt.day);
145 Expect.equals(14, dt.hour);
146 Expect.equals(0, dt.minute);
147 Expect.equals(0, dt.second);
148 Expect.equals(0, dt.millisecond);
149 dt = new DateTime.fromMillisecondsSinceEpoch(-59011408800000, isUtc: true);
150 Expect.equals(100, dt.year);
151 Expect.equals(1, dt.month);
152 Expect.equals(1, dt.day);
153 Expect.equals(14, dt.hour);
154 Expect.equals(0, dt.minute);
155 Expect.equals(0, dt.second);
156 Expect.equals(0, dt.millisecond);
157 dt = new DateTime.fromMillisecondsSinceEpoch(-62011408800000, isUtc: true);
158 Expect.equals(4, dt.year);
159 Expect.equals(12, dt.month);
160 Expect.equals(8, dt.day);
161 Expect.equals(8, dt.hour);
162 Expect.equals(40, dt.minute);
163 Expect.equals(0, dt.second);
164 Expect.equals(0, dt.millisecond);
165 dt = new DateTime.fromMillisecondsSinceEpoch(-64011408800000, isUtc: true);
166 Expect.equals(-59, dt.year);
167 Expect.equals(7, dt.month);
168 Expect.equals(24, dt.day);
169 Expect.equals(5, dt.hour);
170 Expect.equals(6, dt.minute);
171 Expect.equals(40, dt.second);
172 Expect.equals(0, dt.millisecond);
173 final int SECONDS_YEAR_2035 = 2051222400;
174 dt = new DateTime.fromMillisecondsSinceEpoch(SECONDS_YEAR_2035 * 1000 + 1,
175 isUtc: true);
176 Expect.equals(2035, dt.year);
177 Expect.equals(1, dt.month);
178 Expect.equals(1, dt.day);
179 Expect.equals(0, dt.hour);
180 Expect.equals(0, dt.minute);
181 Expect.equals(0, dt.second);
182 Expect.equals(1, dt.millisecond);
183 dt = new DateTime.fromMillisecondsSinceEpoch(SECONDS_YEAR_2035 * 1000 - 1,
184 isUtc: true);
185 Expect.equals(2034, dt.year);
186 Expect.equals(12, dt.month);
187 Expect.equals(31, dt.day);
188 Expect.equals(23, dt.hour);
189 Expect.equals(59, dt.minute);
190 Expect.equals(59, dt.second);
191 Expect.equals(999, dt.millisecond);
192 dt = new DateTime.utc(2035, 1, 1, 0, 0, 0, 1);
193 Expect.equals(SECONDS_YEAR_2035 * 1000 + 1, dt.millisecondsSinceEpoch);
194 dt = new DateTime.utc(2034, 12, 31, 23, 59, 59, 999);
195 Expect.equals(SECONDS_YEAR_2035 * 1000 - 1, dt.millisecondsSinceEpoch);
196 dt = new DateTime.fromMillisecondsSinceEpoch(SECONDS_YEAR_2035 * 1000 + 1);
197 Expect.equals(true, (2035 == dt.year && 1 == dt.month && 1 == dt.day) ||
198 (2034 == dt.year && 12 == dt.month && 31 == dt.day));
199 Expect.equals(0, dt.second);
200 Expect.equals(1, dt.millisecond);
201 DateTime dt2 = new DateTime(
202 dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second,
203 dt.millisecond);
204 Expect.equals(dt.millisecondsSinceEpoch, dt2.millisecondsSinceEpoch);
205 dt = new DateTime.fromMillisecondsSinceEpoch(SECONDS_YEAR_2035 * 1000 - 1);
206 Expect.equals(true, (2035 == dt.year && 1 == dt.month && 1 == dt.day) ||
207 (2034 == dt.year && 12 == dt.month && 31 == dt.day));
208 Expect.equals(59, dt.second);
209 Expect.equals(999, dt.millisecond);
210 dt2 = new DateTime(
211 dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second,
212 dt.millisecond);
213 Expect.equals(dt.millisecondsSinceEpoch, dt2.millisecondsSinceEpoch);
214 dt = new DateTime.fromMillisecondsSinceEpoch(2100000000 * 1000, isUtc: true) ;
215 Expect.equals(2036, dt.year);
216 Expect.equals(7, dt.month);
217 Expect.equals(18, dt.day);
218 Expect.equals(13, dt.hour);
219 Expect.equals(20, dt.minute);
220 Expect.equals(0, dt.second);
221 Expect.equals(0, dt.millisecond);
222 // Internally this will use the maximum value for the native calls.
223 dt = new DateTime(2036, 7, 18, 13, 20);
224 Expect.equals(2036, dt.year);
225 Expect.equals(7, dt.month);
226 Expect.equals(18, dt.day);
227 Expect.equals(13, dt.hour);
228 Expect.equals(20, dt.minute);
229 Expect.equals(0, dt.second);
230 Expect.equals(0, dt.millisecond);
231 Expect.equals("2036-07-18 13:20:00.000", dt.toString());
232 }
233
234 static void testExtremes() {
235 var dt =
236 new DateTime.fromMillisecondsSinceEpoch(8640000000000000, isUtc: true);
237 Expect.equals(275760, dt.year);
238 Expect.equals(9, dt.month);
239 Expect.equals(13, dt.day);
240 Expect.equals(0, dt.hour);
241 Expect.equals(0, dt.minute);
242 Expect.equals(0, dt.second);
243 Expect.equals(0, dt.millisecond);
244 dt = new DateTime.fromMillisecondsSinceEpoch(-8640000000000000, isUtc: true) ;
245 Expect.equals(-271821, dt.year);
246 Expect.equals(4, dt.month);
247 Expect.equals(20, dt.day);
248 Expect.equals(0, dt.hour);
249 Expect.equals(0, dt.minute);
250 Expect.equals(0, dt.second);
251 Expect.equals(0, dt.millisecond);
252 // Make sure that we can build the extreme dates in local too.
253 dt = new DateTime.fromMillisecondsSinceEpoch(8640000000000000);
254 dt = new DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute);
255 Expect.equals(8640000000000000, dt.millisecondsSinceEpoch);
256 dt = new DateTime.fromMillisecondsSinceEpoch(-8640000000000000);
257 dt = new DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute);
258 Expect.equals(-8640000000000000, dt.millisecondsSinceEpoch);
259 Expect.throws(() => new DateTime.fromMillisecondsSinceEpoch(8640000000000001 ,
260 isUtc: true));
261 Expect.throws(() => new DateTime.fromMillisecondsSinceEpoch(-864000000000000 1,
262 isUtc: true));
263 Expect.throws(() => new DateTime.fromMillisecondsSinceEpoch(8640000000000001 ));
264 Expect.throws(() => new DateTime.fromMillisecondsSinceEpoch(-864000000000000 1));
265 dt = new DateTime.fromMillisecondsSinceEpoch(8640000000000000);
266 Expect.throws(() => new DateTime(dt.year, dt.month, dt.day,
267 dt.hour, dt.minute, 0, 1));
268 dt = new DateTime.fromMillisecondsSinceEpoch(8640000000000000, isUtc: true);
269 Expect.throws(() => new DateTime.utc(dt.year, dt.month, dt.day,
270 dt.hour, dt.minute, 0, 1));
271 dt = new DateTime.fromMillisecondsSinceEpoch(-8640000000000000);
272 Expect.throws(() => new DateTime(dt.year, dt.month, dt.day,
273 dt.hour, dt.minute, 0, -1));
274 dt = new DateTime.fromMillisecondsSinceEpoch(-8640000000000000, isUtc: true) ;
275 Expect.throws(() => new DateTime.utc(dt.year, dt.month, dt.day,
276 dt.hour, dt.minute, 0, -1));
277 }
278
279 static void testUTCGetters() {
280 var dt = new DateTime.fromMillisecondsSinceEpoch(1305140315000, isUtc: true) ;
281 Expect.equals(2011, dt.year);
282 Expect.equals(5, dt.month);
283 Expect.equals(11, dt.day);
284 Expect.equals(18, dt.hour);
285 Expect.equals(58, dt.minute);
286 Expect.equals(35, dt.second);
287 Expect.equals(0, dt.millisecond);
288 Expect.equals(true, dt.isUtc);
289 Expect.equals(1305140315000, dt.millisecondsSinceEpoch);
290 dt = new DateTime.fromMillisecondsSinceEpoch(-9999999, isUtc: true);
291 Expect.equals(1969, dt.year);
292 Expect.equals(12, dt.month);
293 Expect.equals(31, dt.day);
294 Expect.equals(21, dt.hour);
295 Expect.equals(13, dt.minute);
296 Expect.equals(20, dt.second);
297 Expect.equals(1, dt.millisecond);
298 }
299
300 static void testLocalGetters() {
301 var dt1 = new DateTime.fromMillisecondsSinceEpoch(1305140315000);
302 var dt2 = new DateTime.utc(dt1.year, dt1.month, dt1.day,
303 dt1.hour, dt1.minute, dt1.second, dt1.millisecond);
304 Duration zoneOffset = dt1.difference(dt2);
305 Expect.equals(true, zoneOffset.inDays == 0);
306 Expect.equals(true, zoneOffset.inHours.abs() <= 12);
307 Expect.equals(dt1.year, dt2.year);
308 Expect.equals(dt1.month, dt2.month);
309 Expect.equals(true, (dt1.day - dt2.day).abs() <= 1);
310 Expect.equals(true, dt1.hour < 24);
311 // There are timezones with 0.5 or 0.25 hour offsets.
312 Expect.equals(true,
313 (dt1.minute == dt2.minute) ||
314 ((dt1.minute - dt2.minute).abs() == 30) ||
315 ((dt1.minute - dt2.minute).abs() == 15));
316 Expect.equals(dt1.second, dt2.second);
317 Expect.equals(dt1.millisecond, dt2.millisecond);
318 }
319
320 static void testConstructors() {
321 var dt0 = new DateTime.utc(2011, 5, 11, 18, 58, 35, 0);
322 var dt0b = new DateTime.utc(2011, 5, 11, 18, 58, 35, 0).toLocal();
323 Expect.equals(1305140315000, dt0.millisecondsSinceEpoch);
324 var dt1 = new DateTime.fromMillisecondsSinceEpoch(1305140315000);
325 Expect.equals(dt1.millisecondsSinceEpoch, dt0.millisecondsSinceEpoch);
326 Expect.equals(false, dt1 == dt0);
327 Expect.equals(true, dt1 == dt0b);
328 var dt3 = new DateTime(dt1.year, dt1.month, dt1.day, dt1.hour, dt1.minute,
329 dt1.second, dt1.millisecond);
330 Expect.equals(dt1.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch);
331 Expect.equals(false, dt3 == dt0);
332 Expect.equals(true, dt1 == dt3);
333 dt3 = new DateTime(
334 dt1.year, dt1.month, dt1.day, dt1.hour, dt1.minute,
335 dt1.second, dt1.millisecond);
336 Expect.equals(dt1.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch);
337 Expect.equals(true, dt1 == dt3);
338 var dt2 = dt1.toLocal();
339 dt3 = new DateTime(2011, 5, dt1.day, dt1.hour, dt1.minute, 35, 0);
340 Expect.equals(dt2.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch);
341 Expect.equals(true, dt2 == dt3);
342 dt1 = new DateTime.fromMillisecondsSinceEpoch(-9999999, isUtc: true);
343 dt3 = new DateTime.utc(dt1.year, dt1.month, dt1.day, dt1.hour, dt1.minute,
344 dt1.second, dt1.millisecond);
345 Expect.equals(dt1.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch);
346 dt3 = new DateTime.utc(99, 1, 2, 10, 11, 12, 0);
347 Expect.equals(99, dt3.year);
348 Expect.equals(1, dt3.month);
349 Expect.equals(2, dt3.day);
350 Expect.equals(10, dt3.hour);
351 Expect.equals(11, dt3.minute);
352 Expect.equals(12, dt3.second);
353 Expect.equals(0, dt3.millisecond);
354 Expect.equals(true, dt3.isUtc);
355 var dt4 = new DateTime(99, 1, 2);
356 Expect.equals(99, dt4.year);
357 Expect.equals(1, dt4.month);
358 Expect.equals(2, dt4.day);
359 Expect.equals(0, dt4.hour);
360 Expect.equals(0, dt4.minute);
361 Expect.equals(0, dt4.second);
362 Expect.equals(0, dt4.millisecond);
363 Expect.isFalse(dt4.isUtc);
364 var dt5 = new DateTime.utc(99, 1, 2);
365 Expect.equals(99, dt5.year);
366 Expect.equals(1, dt5.month);
367 Expect.equals(2, dt5.day);
368 Expect.equals(0, dt5.hour);
369 Expect.equals(0, dt5.minute);
370 Expect.equals(0, dt5.second);
371 Expect.equals(0, dt5.millisecond);
372 Expect.isTrue(dt5.isUtc);
373 var dt6 = new DateTime(2012, 2, 27, 13, 27, 0);
374 Expect.equals(2012, dt6.year);
375 Expect.equals(2, dt6.month);
376 Expect.equals(27, dt6.day);
377 Expect.equals(13, dt6.hour);
378 Expect.equals(27, dt6.minute);
379 Expect.equals(0, dt6.second);
380 Expect.equals(0, dt6.millisecond);
381 Expect.isFalse(dt6.isUtc);
382 var dt7 = new DateTime.utc(2012, 2, 27, 13, 27, 0);
383 Expect.equals(2012, dt7.year);
384 Expect.equals(2, dt7.month);
385 Expect.equals(27, dt7.day);
386 Expect.equals(13, dt7.hour);
387 Expect.equals(27, dt7.minute);
388 Expect.equals(0, dt7.second);
389 Expect.equals(0, dt7.millisecond);
390 Expect.isTrue(dt7.isUtc);
391 }
392
393 static void testChangeTimeZone() {
394 var dt1 = new DateTime.fromMillisecondsSinceEpoch(1305140315000);
395 var dt2 = dt1.toUtc();
396 Expect.equals(dt1.millisecondsSinceEpoch, dt2.millisecondsSinceEpoch);
397 var dt3 = new DateTime.fromMillisecondsSinceEpoch(1305140315000, isUtc: true );
398 Expect.equals(dt1.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch);
399 Expect.equals(dt2.year, dt3.year);
400 Expect.equals(dt2.month, dt3.month);
401 Expect.equals(dt2.day, dt3.day);
402 Expect.equals(dt2.hour, dt3.hour);
403 Expect.equals(dt2.minute, dt3.minute);
404 Expect.equals(dt2.second, dt3.second);
405 Expect.equals(dt2.millisecond, dt3.millisecond);
406 var dt4 = dt3.toLocal();
407 Expect.equals(dt1.year, dt4.year);
408 Expect.equals(dt1.month, dt4.month);
409 Expect.equals(dt1.day, dt4.day);
410 Expect.equals(dt1.hour, dt4.hour);
411 Expect.equals(dt1.minute, dt4.minute);
412 Expect.equals(dt1.second, dt4.second);
413 Expect.equals(dt1.millisecond, dt4.millisecond);
414 }
415
416 static void testSubAdd() {
417 var dt1 = new DateTime.fromMillisecondsSinceEpoch(1305140315000, isUtc: true );
418 var dt2 = dt1.add(new Duration(milliseconds:
419 3 * Duration.MILLISECONDS_PER_SECOND + 5));
420 Expect.equals(dt1.year, dt2.year);
421 Expect.equals(dt1.month, dt2.month);
422 Expect.equals(dt1.day, dt2.day);
423 Expect.equals(dt1.hour, dt2.hour);
424 Expect.equals(dt1.minute, dt2.minute);
425 Expect.equals(dt1.second + 3, dt2.second);
426 Expect.equals(dt1.millisecond + 5, dt2.millisecond);
427 var dt3 = dt2.subtract(new Duration(milliseconds:
428 3 * Duration.MILLISECONDS_PER_SECOND + 5));
429 Expect.equals(true, dt1 == dt3);
430 Expect.equals(false, dt1 == dt2);
431 }
432
433 static void testUnderflowAndOverflow() {
434 final dtBase = new DateTime(2012, 6, 20, 12, 30, 30, 500);
435
436 // Millisecond
437 print(" >>> Millisecond+");
438 var dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour,
439 dtBase.minute, dtBase.second, 1000);
440 Expect.equals(dtBase.year, dt.year);
441 Expect.equals(dtBase.month, dt.month);
442 Expect.equals(dtBase.day, dt.day);
443 Expect.equals(dtBase.hour, dt.hour);
444 Expect.equals(dtBase.minute, dt.minute);
445 Expect.equals(dtBase.second + 1, dt.second);
446 Expect.equals(0, dt.millisecond);
447
448 print(" >>> Millisecond-");
449 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour,
450 dtBase.minute, dtBase.second, -1000);
451 Expect.equals(dtBase.year, dt.year);
452 Expect.equals(dtBase.month, dt.month);
453 Expect.equals(dtBase.day, dt.day);
454 Expect.equals(dtBase.hour, dt.hour);
455 Expect.equals(dtBase.minute, dt.minute);
456 Expect.equals(dtBase.second - 1, dt.second);
457 Expect.equals(0, dt.millisecond);
458
459 // Second
460 print(" >>> Second+");
461 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour,
462 dtBase.minute, 60, dtBase.millisecond);
463 Expect.equals(dtBase.year, dt.year);
464 Expect.equals(dtBase.month, dt.month);
465 Expect.equals(dtBase.day, dt.day);
466 Expect.equals(dtBase.hour, dt.hour);
467 Expect.equals(dtBase.minute + 1, dt.minute);
468 Expect.equals(0, dt.second);
469 Expect.equals(dtBase.millisecond, dt.millisecond);
470
471 print(" >>> Second-");
472 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour,
473 dtBase.minute, -60, dtBase.millisecond);
474 Expect.equals(dtBase.year, dt.year);
475 Expect.equals(dtBase.month, dt.month);
476 Expect.equals(dtBase.day, dt.day);
477 Expect.equals(dtBase.hour, dt.hour);
478 Expect.equals(dtBase.minute - 1, dt.minute);
479 Expect.equals(0, dt.second);
480 Expect.equals(dtBase.millisecond, dt.millisecond);
481
482 // Minute
483 print(" >>> Minute+");
484 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour, 60,
485 dtBase.second, dtBase.millisecond);
486 Expect.equals(dtBase.year, dt.year);
487 Expect.equals(dtBase.month, dt.month);
488 Expect.equals(dtBase.day, dt.day);
489 Expect.equals(dtBase.hour + 1, dt.hour);
490 Expect.equals(0, dt.minute);
491 Expect.equals(dtBase.second, dt.second);
492 Expect.equals(dtBase.millisecond, dt.millisecond);
493
494 print(" >>> Minute-");
495 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour, -60,
496 dtBase.second, dtBase.millisecond);
497 Expect.equals(dtBase.year, dt.year);
498 Expect.equals(dtBase.month, dt.month);
499 Expect.equals(dtBase.day, dt.day);
500 Expect.equals(dtBase.hour - 1, dt.hour);
501 Expect.equals(0, dt.minute);
502 Expect.equals(dtBase.second, dt.second);
503 Expect.equals(dtBase.millisecond, dt.millisecond);
504
505 // Hour
506 print(" >>> Hour+");
507 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, 24, dtBase.minute,
508 dtBase.second, dtBase.millisecond);
509 Expect.equals(dtBase.year, dt.year);
510 Expect.equals(dtBase.month, dt.month);
511 Expect.equals(dtBase.day + 1, dt.day);
512 Expect.equals(0, dt.hour);
513 Expect.equals(dtBase.minute, dt.minute);
514 Expect.equals(dtBase.second, dt.second);
515 Expect.equals(dtBase.millisecond, dt.millisecond);
516
517 print(" >>> Hour-");
518 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, -24, dtBase.minute,
519 dtBase.second, dtBase.millisecond);
520 Expect.equals(dtBase.year, dt.year);
521 Expect.equals(dtBase.month, dt.month);
522 Expect.equals(dtBase.day - 1, dt.day);
523 Expect.equals(0, dt.hour);
524 Expect.equals(dtBase.minute, dt.minute);
525 Expect.equals(dtBase.second, dt.second);
526 Expect.equals(dtBase.millisecond, dt.millisecond);
527
528 // Day
529 print(" >>> Day+");
530 dt = new DateTime(dtBase.year, dtBase.month, 31, dtBase.hour, dtBase.minute,
531 dtBase.second, dtBase.millisecond);
532 Expect.equals(dtBase.year, dt.year);
533 Expect.equals(dtBase.month + 1, dt.month);
534 Expect.equals(1, dt.day);
535 Expect.equals(dtBase.hour, dt.hour);
536 Expect.equals(dtBase.minute, dt.minute);
537 Expect.equals(dtBase.second, dt.second);
538 Expect.equals(dtBase.millisecond, dt.millisecond);
539
540 print(" >>> Day-");
541 dt = new DateTime(dtBase.year, dtBase.month, -30, dtBase.hour, dtBase.minute ,
542 dtBase.second, dtBase.millisecond);
543 Expect.equals(dtBase.year, dt.year);
544 Expect.equals(dtBase.month - 1, dt.month);
545 Expect.equals(1, dt.day);
546 Expect.equals(dtBase.hour, dt.hour);
547 Expect.equals(dtBase.minute, dt.minute);
548 Expect.equals(dtBase.second, dt.second);
549 Expect.equals(dtBase.millisecond, dt.millisecond);
550
551 // Month
552 print(" >>> Month+");
553 dt = new DateTime(dtBase.year, 13, dtBase.day, dtBase.hour, dtBase.minute,
554 dtBase.second, dtBase.millisecond);
555 Expect.equals(dtBase.year + 1, dt.year);
556 Expect.equals(1, dt.month);
557 Expect.equals(dtBase.day, dt.day);
558 Expect.equals(dtBase.hour, dt.hour);
559 Expect.equals(dtBase.minute, dt.minute);
560 Expect.equals(dtBase.second, dt.second);
561 Expect.equals(dtBase.millisecond, dt.millisecond);
562
563 print(" >>> Month-");
564 dt = new DateTime(dtBase.year, -11, dtBase.day, dtBase.hour, dtBase.minute,
565 dtBase.second, dtBase.millisecond);
566 Expect.equals(dtBase.year - 1, dt.year);
567 Expect.equals(1, dt.month);
568 Expect.equals(dtBase.day, dt.day);
569 Expect.equals(dtBase.hour, dt.hour);
570 Expect.equals(dtBase.minute, dt.minute);
571 Expect.equals(dtBase.second, dt.second);
572 Expect.equals(dtBase.millisecond, dt.millisecond);
573
574 // Flowing all the way up the chain.
575 print(" >>> Flow+");
576 var dtBase1 = new DateTime(2012, 12, 31, 23, 59, 59, 999);
577 var dtTick = new DateTime(dtBase1.year, dtBase1.month, dtBase1.day,
578 dtBase1.hour, dtBase1.minute, dtBase1.second,
579 dtBase1.millisecond + 1);
580 Expect.equals(dtBase1.year + 1, dtTick.year);
581 Expect.equals(1, dtTick.month);
582 Expect.equals(1, dtTick.day);
583 Expect.equals(0, dtTick.hour);
584 Expect.equals(0, dtTick.minute);
585 Expect.equals(0, dtTick.second);
586 Expect.equals(0, dtTick.millisecond);
587
588 print(" >>> Flow-");
589 dtBase1 = new DateTime(2012, 1, 1, 0, 0, 0, 0);
590 dtTick = new DateTime(dtBase1.year, dtBase1.month, dtBase1.day, dtBase1.hour ,
591 dtBase1.minute, dtBase1.second, dtBase1.millisecond - 1);
592 Expect.equals(dtBase1.year - 1, dtTick.year);
593 Expect.equals(12, dtTick.month);
594 Expect.equals(31, dtTick.day);
595 Expect.equals(23, dtTick.hour);
596 Expect.equals(59, dtTick.minute);
597 Expect.equals(59, dtTick.second);
598 Expect.equals(999, dtTick.millisecond);
599
600 print(" >>> extra underflow");
601 dtTick = new DateTime(dtBase1.year, dtBase1.month, dtBase1.day, -17520,
602 dtBase1.minute, dtBase1.second, dtBase1.millisecond);
603 Expect.equals(dtBase1.year - 2, dtTick.year);
604 Expect.equals(dtBase1.month, dtTick.month);
605 Expect.equals(dtBase1.day, dtTick.day);
606 Expect.equals(dtBase1.hour, dtTick.hour);
607 Expect.equals(dtBase1.minute, dtTick.minute);
608 Expect.equals(dtBase1.second, dtTick.second);
609 Expect.equals(dtBase1.millisecond, dtTick.millisecond);
610 }
611
612 static void testDateStrings() {
613 // TODO(floitsch): Clean up the DateTime API that deals with strings.
614 var dt1 = DateTime.parse("2011-05-11 18:58:35Z");
615 Expect.equals(1305140315000, dt1.millisecondsSinceEpoch);
616 Expect.isTrue(dt1.isUtc);
617 dt1 = DateTime.parse("20110511 18:58:35z");
618 Expect.equals(1305140315000, dt1.millisecondsSinceEpoch);
619 Expect.isTrue(dt1.isUtc);
620 dt1 = DateTime.parse("+20110511 18:58:35z");
621 Expect.equals(1305140315000, dt1.millisecondsSinceEpoch);
622 Expect.isTrue(dt1.isUtc);
623 var str = dt1.toString();
624 var dt2 = DateTime.parse(str);
625 Expect.equals(true, dt1 == dt2);
626 var dt3 = dt1.toUtc();
627 str = dt3.toString();
628 Expect.equals("2011-05-11 18:58:35.000Z", str);
629 var dt4 = DateTime.parse("-1234-01-01 00:00:00Z");
630 Expect.equals(-1234, dt4.year);
631 Expect.equals(1, dt4.month);
632 Expect.equals(1, dt4.day);
633 Expect.equals(0, dt4.hour);
634 Expect.equals(0, dt4.minute);
635 Expect.equals(0, dt4.second);
636 Expect.equals(0, dt4.millisecond);
637 Expect.isTrue(dt4.isUtc);
638 var dt5 = DateTime.parse("0099-01-02");
639 Expect.equals(99, dt5.year);
640 Expect.equals(1, dt5.month);
641 Expect.equals(2, dt5.day);
642 Expect.equals(0, dt5.hour);
643 Expect.equals(0, dt5.minute);
644 Expect.equals(0, dt5.second);
645 Expect.equals(0, dt5.millisecond);
646 Expect.isFalse(dt5.isUtc);
647 var dt6 = DateTime.parse("2012-01-01 00:00:10.012");
648 Expect.equals(12, dt6.millisecond);
649 dt6 = DateTime.parse("2012-01-01 00:00:10.003");
650 Expect.equals(3, dt6.millisecond);
651 dt6 = DateTime.parse("2012-01-01 00:00:10.5");
652 Expect.equals(500, dt6.millisecond);
653 dt6 = DateTime.parse("2012-01-01 00:00:10.003Z");
654 Expect.equals(3, dt6.millisecond);
655 dt6 = DateTime.parse("2012-01-01 00:00:10.5z");
656 Expect.equals(500, dt6.millisecond);
657 var dt7 = DateTime.parse("2011-05-11T18:58:35Z");
658 Expect.equals(1305140315000, dt7.millisecondsSinceEpoch);
659 var dt8 = DateTime.parse("-1234-01-01T00:00:00Z");
660 Expect.equals(-1234, dt8.year);
661 Expect.equals(1, dt8.month);
662 Expect.equals(1, dt8.day);
663 Expect.equals(0, dt8.hour);
664 Expect.equals(0, dt8.minute);
665 Expect.equals(0, dt8.second);
666 Expect.equals(0, dt8.millisecond);
667 Expect.isTrue(dt8.isUtc);
668 var dt9 = DateTime.parse("-1234-01-01T00:00:00");
669 Expect.equals(-1234, dt9.year);
670 Expect.equals(1, dt9.month);
671 Expect.equals(1, dt9.day);
672 Expect.equals(0, dt9.hour);
673 Expect.equals(0, dt9.minute);
674 Expect.equals(0, dt9.second);
675 Expect.equals(0, dt9.millisecond);
676 Expect.isFalse(dt9.isUtc);
677 var dt10 = DateTime.parse("-12340101");
678 Expect.equals(-1234, dt10.year);
679 Expect.equals(1, dt10.month);
680 Expect.equals(1, dt10.day);
681 Expect.equals(0, dt10.hour);
682 Expect.equals(0, dt10.minute);
683 Expect.equals(0, dt10.second);
684 Expect.equals(0, dt10.millisecond);
685 Expect.isFalse(dt10.isUtc);
686 dt1 = DateTime.parse("2012-02-27 13:27:00");
687 Expect.equals(2012, dt1.year);
688 Expect.equals(2, dt1.month);
689 Expect.equals(27, dt1.day);
690 Expect.equals(13, dt1.hour);
691 Expect.equals(27, dt1.minute);
692 Expect.equals(0, dt1.second);
693 Expect.equals(0, dt1.millisecond);
694 Expect.equals(false, dt1.isUtc);
695 dt1 = DateTime.parse("2012-02-27 13:27:00.423z");
696 Expect.equals(2012, dt1.year);
697 Expect.equals(2, dt1.month);
698 Expect.equals(27, dt1.day);
699 Expect.equals(13, dt1.hour);
700 Expect.equals(27, dt1.minute);
701 Expect.equals(0, dt1.second);
702 Expect.equals(423, dt1.millisecond);
703 Expect.equals(true, dt1.isUtc);
704 dt1 = DateTime.parse("20120227 13:27:00");
705 Expect.equals(2012, dt1.year);
706 Expect.equals(2, dt1.month);
707 Expect.equals(27, dt1.day);
708 Expect.equals(13, dt1.hour);
709 Expect.equals(27, dt1.minute);
710 Expect.equals(0, dt1.second);
711 Expect.equals(0, dt1.millisecond);
712 Expect.equals(false, dt1.isUtc);
713 dt1 = DateTime.parse("20120227T132700");
714 Expect.equals(2012, dt1.year);
715 Expect.equals(2, dt1.month);
716 Expect.equals(27, dt1.day);
717 Expect.equals(13, dt1.hour);
718 Expect.equals(27, dt1.minute);
719 Expect.equals(0, dt1.second);
720 Expect.equals(0, dt1.millisecond);
721 Expect.equals(false, dt1.isUtc);
722 dt1 = DateTime.parse("20120227");
723 Expect.equals(2012, dt1.year);
724 Expect.equals(2, dt1.month);
725 Expect.equals(27, dt1.day);
726 Expect.equals(0, dt1.hour);
727 Expect.equals(0, dt1.minute);
728 Expect.equals(0, dt1.second);
729 Expect.equals(0, dt1.millisecond);
730 Expect.equals(false, dt1.isUtc);
731 dt1 = DateTime.parse("2012-02-27T14Z");
732 Expect.equals(2012, dt1.year);
733 Expect.equals(2, dt1.month);
734 Expect.equals(27, dt1.day);
735 Expect.equals(14, dt1.hour);
736 Expect.equals(0, dt1.minute);
737 Expect.equals(0, dt1.second);
738 Expect.equals(0, dt1.millisecond);
739 Expect.equals(true, dt1.isUtc);
740 dt1 = DateTime.parse("-123450101 00:00:00 Z");
741 Expect.equals(-12345, dt1.year);
742 Expect.equals(1, dt1.month);
743 Expect.equals(1, dt1.day);
744 Expect.equals(0, dt1.hour);
745 Expect.equals(0, dt1.minute);
746 Expect.equals(0, dt1.second);
747 Expect.equals(0, dt1.millisecond);
748 Expect.equals(true, dt1.isUtc);
749 // We only support millisecond. If the user supplies more data (the "51"
750 // here), we round.
751 // If (eventually) we support more than just millisecond this test could
752 // fail. Please update the test in this case.
753 dt1 = DateTime.parse("1999-01-02 23:59:59.99951");
754 Expect.equals(1999, dt1.year);
755 Expect.equals(1, dt1.month);
756 Expect.equals(3, dt1.day);
757 Expect.equals(0, dt1.hour);
758 Expect.equals(0, dt1.minute);
759 Expect.equals(0, dt1.second);
760 Expect.equals(0, dt1.millisecond);
761 Expect.equals(false, dt1.isUtc);
762 dt1 = DateTime.parse("1999-01-02 23:58:59.99951Z");
763 Expect.equals(1999, dt1.year);
764 Expect.equals(1, dt1.month);
765 Expect.equals(2, dt1.day);
766 Expect.equals(23, dt1.hour);
767 Expect.equals(59, dt1.minute);
768 Expect.equals(0, dt1.second);
769 Expect.equals(0, dt1.millisecond);
770 Expect.equals(true, dt1.isUtc);
771 dt1 = DateTime.parse("0009-09-09 09:09:09.009Z");
772 Expect.equals(9, dt1.year);
773 Expect.equals(9, dt1.month);
774 Expect.equals(9, dt1.day);
775 Expect.equals(9, dt1.hour);
776 Expect.equals(9, dt1.minute);
777 Expect.equals(9, dt1.second);
778 Expect.equals(9, dt1.millisecond);
779 Expect.equals(true, dt1.isUtc);
780 }
781
782 static void testWeekday() {
783 // 2011-10-06 is Summertime.
784 var d = new DateTime(2011, 10, 6, 0, 45, 37, 0);
785 Expect.equals(DateTime.THURSDAY, d.weekday);
786 d = new DateTime.utc(2011, 10, 6, 0, 45, 37, 0);
787 Expect.equals(DateTime.THURSDAY, d.weekday);
788 d = new DateTime(2011, 10, 5, 23, 45, 37, 0);
789 Expect.equals(DateTime.WEDNESDAY, d.weekday);
790 d = new DateTime.utc(2011, 10, 5, 23, 45, 37, 0);
791 Expect.equals(DateTime.WEDNESDAY, d.weekday);
792 // 1970-01-01 is Wintertime.
793 d = new DateTime(1970, 1, 1, 0, 0, 0, 1);
794 Expect.equals(DateTime.THURSDAY, d.weekday);
795 d = new DateTime.utc(1970, 1, 1, 0, 0, 0, 1);
796 Expect.equals(DateTime.THURSDAY, d.weekday);
797 d = new DateTime.utc(1969, 12, 31, 23, 59, 59, 999);
798 Expect.equals(DateTime.WEDNESDAY, d.weekday);
799 d = new DateTime(1969, 12, 31, 23, 59, 59, 999);
800 Expect.equals(DateTime.WEDNESDAY, d.weekday);
801 d = new DateTime(2011, 10, 4, 23, 45, 37, 0);
802 Expect.equals(DateTime.TUESDAY, d.weekday);
803 d = new DateTime(2011, 10, 3, 23, 45, 37, 0);
804 Expect.equals(DateTime.MONDAY, d.weekday);
805 d = new DateTime(2011, 10, 2, 23, 45, 37, 0);
806 Expect.equals(DateTime.SUNDAY, d.weekday);
807 d = new DateTime(2011, 10, 1, 23, 45, 37, 0);
808 Expect.equals(DateTime.SATURDAY, d.weekday);
809 d = new DateTime(2011, 9, 30, 23, 45, 37, 0);
810 Expect.equals(DateTime.FRIDAY, d.weekday);
811 }
812
813 static void testMain() {
814 testNow();
815 testValue();
816 testConstructors();
817 testUTCGetters();
818 testLocalGetters();
819 testChangeTimeZone();
820 testSubAdd();
821 testUnderflowAndOverflow();
822 testDateStrings();
823 testEquivalentYears();
824 testExtremes();
825 testFarAwayDates();
826 testWeekday();
827 }
828 }
829
830 main() {
831 DateTest.testMain();
832 }
OLDNEW
« no previous file with comments | « sdk/lib/core/date_time.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698