| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 import "package:expect/expect.dart"; | |
| 6 | |
| 7 // Dart test program for DateTime. | |
| 8 | |
| 9 bool get supportsMicroseconds => | |
| 10 new DateTime.fromMicrosecondsSinceEpoch(1).microsecondsSinceEpoch == 1; | |
| 11 | |
| 12 // Identical to _MAX_MILLISECONDS_SINCE_EPOCH in date_time.dart | |
| 13 const int _MAX_MILLISECONDS = 8640000000000000; | |
| 14 | |
| 15 // Tests if the time moves eventually forward. | |
| 16 void testNow() { | |
| 17 var t1 = new DateTime.now(); | |
| 18 bool timeMovedForward = false; | |
| 19 const int N = 1000000; | |
| 20 outer: | |
| 21 while (true) { | |
| 22 for (int i = N; i > 0; i--) { | |
| 23 var t2 = new DateTime.now(); | |
| 24 if (t1.millisecondsSinceEpoch < t2.millisecondsSinceEpoch) { | |
| 25 break outer; | |
| 26 } | |
| 27 } | |
| 28 print("testNow: No Date.now() progress in $N loops. Time: $t1"); | |
| 29 } | |
| 30 Expect.isFalse(t1.isUtc); | |
| 31 } | |
| 32 | |
| 33 void testMillisecondsSinceEpoch() { | |
| 34 var dt1 = new DateTime.now(); | |
| 35 var millisecondsSinceEpoch = dt1.millisecondsSinceEpoch; | |
| 36 var dt2 = new DateTime.fromMillisecondsSinceEpoch(millisecondsSinceEpoch); | |
| 37 Expect.equals(millisecondsSinceEpoch, dt2.millisecondsSinceEpoch); | |
| 38 } | |
| 39 | |
| 40 void testMicrosecondsSinceEpoch() { | |
| 41 var dt1 = new DateTime.fromMillisecondsSinceEpoch(1); | |
| 42 var microsecondsSinceEpoch = dt1.microsecondsSinceEpoch; | |
| 43 var dt2 = new DateTime.fromMicrosecondsSinceEpoch(microsecondsSinceEpoch); | |
| 44 Expect.equals(microsecondsSinceEpoch, dt2.microsecondsSinceEpoch); | |
| 45 | |
| 46 dt1 = new DateTime.now(); | |
| 47 microsecondsSinceEpoch = dt1.microsecondsSinceEpoch; | |
| 48 dt2 = new DateTime.fromMicrosecondsSinceEpoch(microsecondsSinceEpoch); | |
| 49 Expect.equals(microsecondsSinceEpoch, dt2.microsecondsSinceEpoch); | |
| 50 } | |
| 51 | |
| 52 void testFarAwayDates() { | |
| 53 DateTime dt = | |
| 54 new DateTime.fromMillisecondsSinceEpoch(1000000000000001, isUtc: true); | |
| 55 Expect.equals(33658, dt.year); | |
| 56 Expect.equals(9, dt.month); | |
| 57 Expect.equals(27, dt.day); | |
| 58 Expect.equals(1, dt.hour); | |
| 59 Expect.equals(46, dt.minute); | |
| 60 Expect.equals(40, dt.second); | |
| 61 Expect.equals(1, dt.millisecond); | |
| 62 Expect.equals(0, dt.microsecond); | |
| 63 dt = new DateTime.fromMillisecondsSinceEpoch(-1000000000000001, isUtc: true); | |
| 64 Expect.equals(-29719, dt.year); | |
| 65 Expect.equals(4, dt.month); | |
| 66 Expect.equals(5, dt.day); | |
| 67 Expect.equals(22, dt.hour); | |
| 68 Expect.equals(13, dt.minute); | |
| 69 Expect.equals(19, dt.second); | |
| 70 Expect.equals(999, dt.millisecond); | |
| 71 Expect.equals(0, dt.microsecond); | |
| 72 // Same with local zone. | |
| 73 dt = new DateTime.fromMillisecondsSinceEpoch(1000000000000001); | |
| 74 Expect.equals(33658, dt.year); | |
| 75 Expect.equals(9, dt.month); | |
| 76 Expect.equals(true, dt.day == 27 || dt.day == 26); | |
| 77 // Not much we can test for local hour. | |
| 78 Expect.equals(true, dt.hour >= 0 && dt.hour < 24); | |
| 79 // Timezones can have offsets down to 15 minute. | |
| 80 Expect.equals(true, dt.minute % 15 == 46 % 15); | |
| 81 Expect.equals(40, dt.second); | |
| 82 Expect.equals(1, dt.millisecond); | |
| 83 Expect.equals(0, dt.microsecond); | |
| 84 dt = new DateTime.fromMillisecondsSinceEpoch(-1000000000000001); | |
| 85 Expect.equals(-29719, dt.year); | |
| 86 Expect.equals(4, dt.month); | |
| 87 Expect.equals(true, 5 == dt.day || 6 == dt.day); | |
| 88 // Not much we can test for local hour. | |
| 89 Expect.equals(true, dt.hour >= 0 && dt.hour < 24); | |
| 90 // Timezones can have offsets down to 15 minute. | |
| 91 Expect.equals(true, dt.minute % 15 == 13); | |
| 92 Expect.equals(19, dt.second); | |
| 93 Expect.equals(999, dt.millisecond); | |
| 94 Expect.equals(0, dt.microsecond); | |
| 95 | |
| 96 if (!supportsMicroseconds) return; | |
| 97 dt = | |
| 98 new DateTime.fromMicrosecondsSinceEpoch(1000000000000000001, isUtc: true); | |
| 99 Expect.equals(33658, dt.year); | |
| 100 Expect.equals(9, dt.month); | |
| 101 Expect.equals(27, dt.day); | |
| 102 Expect.equals(1, dt.hour); | |
| 103 Expect.equals(46, dt.minute); | |
| 104 Expect.equals(40, dt.second); | |
| 105 Expect.equals(0, dt.millisecond); | |
| 106 Expect.equals(1, dt.microsecond); | |
| 107 dt = new DateTime.fromMicrosecondsSinceEpoch(-1000000000000000001, | |
| 108 isUtc: true); | |
| 109 Expect.equals(-29719, dt.year); | |
| 110 Expect.equals(4, dt.month); | |
| 111 Expect.equals(5, dt.day); | |
| 112 Expect.equals(22, dt.hour); | |
| 113 Expect.equals(13, dt.minute); | |
| 114 Expect.equals(19, dt.second); | |
| 115 Expect.equals(999, dt.millisecond); | |
| 116 Expect.equals(999, dt.microsecond); | |
| 117 // Same with local zone. | |
| 118 dt = new DateTime.fromMicrosecondsSinceEpoch(1000000000000000001); | |
| 119 Expect.equals(33658, dt.year); | |
| 120 Expect.equals(9, dt.month); | |
| 121 Expect.equals(true, dt.day == 27 || dt.day == 26); | |
| 122 // Not much we can test for local hour. | |
| 123 Expect.equals(true, dt.hour >= 0 && dt.hour < 24); | |
| 124 // Timezones can have offsets down to 15 minute. | |
| 125 Expect.equals(true, dt.minute % 15 == 46 % 15); | |
| 126 Expect.equals(40, dt.second); | |
| 127 Expect.equals(0, dt.millisecond); | |
| 128 Expect.equals(1, dt.microsecond); | |
| 129 dt = new DateTime.fromMicrosecondsSinceEpoch(-1000000000000000001); | |
| 130 Expect.equals(-29719, dt.year); | |
| 131 Expect.equals(4, dt.month); | |
| 132 Expect.equals(true, 5 == dt.day || 6 == dt.day); | |
| 133 // Not much we can test for local hour. | |
| 134 Expect.equals(true, dt.hour >= 0 && dt.hour < 24); | |
| 135 // Timezones can have offsets down to 15 minute. | |
| 136 Expect.equals(true, dt.minute % 15 == 13); | |
| 137 Expect.equals(19, dt.second); | |
| 138 Expect.equals(999, dt.millisecond); | |
| 139 Expect.equals(999, dt.microsecond); | |
| 140 } | |
| 141 | |
| 142 void testEquivalentYears() { | |
| 143 // All hardcoded values come from V8. This means that the values are not | |
| 144 // necessarily correct (see limitations of DateTime object in | |
| 145 // EcmaScript 15.9.1 and in particular 15.9.1.8/9). | |
| 146 DateTime dt = | |
| 147 new DateTime.fromMillisecondsSinceEpoch(-31485600000, isUtc: true); | |
| 148 Expect.equals(1969, dt.year); | |
| 149 Expect.equals(1, dt.month); | |
| 150 Expect.equals(1, dt.day); | |
| 151 Expect.equals(14, dt.hour); | |
| 152 Expect.equals(0, dt.minute); | |
| 153 Expect.equals(0, dt.second); | |
| 154 Expect.equals(0, dt.millisecond); | |
| 155 Expect.equals(0, dt.microsecond); | |
| 156 dt = new DateTime.fromMillisecondsSinceEpoch(-63108000000, isUtc: true); | |
| 157 Expect.equals(1968, dt.year); | |
| 158 Expect.equals(1, dt.month); | |
| 159 Expect.equals(1, dt.day); | |
| 160 Expect.equals(14, dt.hour); | |
| 161 Expect.equals(0, dt.minute); | |
| 162 Expect.equals(0, dt.second); | |
| 163 Expect.equals(0, dt.millisecond); | |
| 164 Expect.equals(0, dt.microsecond); | |
| 165 dt = new DateTime.fromMillisecondsSinceEpoch(-94644000000, isUtc: true); | |
| 166 Expect.equals(1967, dt.year); | |
| 167 Expect.equals(1, dt.month); | |
| 168 Expect.equals(1, dt.day); | |
| 169 Expect.equals(14, dt.hour); | |
| 170 Expect.equals(0, dt.minute); | |
| 171 Expect.equals(0, dt.second); | |
| 172 Expect.equals(0, dt.millisecond); | |
| 173 Expect.equals(0, dt.microsecond); | |
| 174 dt = new DateTime.fromMillisecondsSinceEpoch(-126180000000, isUtc: true); | |
| 175 Expect.equals(1966, dt.year); | |
| 176 Expect.equals(1, dt.month); | |
| 177 Expect.equals(1, dt.day); | |
| 178 Expect.equals(14, dt.hour); | |
| 179 Expect.equals(0, dt.minute); | |
| 180 Expect.equals(0, dt.second); | |
| 181 Expect.equals(0, dt.millisecond); | |
| 182 Expect.equals(0, dt.microsecond); | |
| 183 dt = new DateTime.fromMillisecondsSinceEpoch(-157716000000, isUtc: true); | |
| 184 Expect.equals(1965, dt.year); | |
| 185 Expect.equals(1, dt.month); | |
| 186 Expect.equals(1, dt.day); | |
| 187 Expect.equals(14, dt.hour); | |
| 188 Expect.equals(0, dt.minute); | |
| 189 Expect.equals(0, dt.second); | |
| 190 Expect.equals(0, dt.millisecond); | |
| 191 Expect.equals(0, dt.microsecond); | |
| 192 dt = new DateTime.fromMillisecondsSinceEpoch(-2177402400000, isUtc: true); | |
| 193 Expect.equals(1901, dt.year); | |
| 194 Expect.equals(1, dt.month); | |
| 195 Expect.equals(1, dt.day); | |
| 196 Expect.equals(14, dt.hour); | |
| 197 Expect.equals(0, dt.minute); | |
| 198 Expect.equals(0, dt.second); | |
| 199 Expect.equals(0, dt.millisecond); | |
| 200 Expect.equals(0, dt.microsecond); | |
| 201 dt = new DateTime.fromMillisecondsSinceEpoch(-5333076000000, isUtc: true); | |
| 202 Expect.equals(1801, dt.year); | |
| 203 Expect.equals(1, dt.month); | |
| 204 Expect.equals(1, dt.day); | |
| 205 Expect.equals(14, dt.hour); | |
| 206 Expect.equals(0, dt.minute); | |
| 207 Expect.equals(0, dt.second); | |
| 208 Expect.equals(0, dt.millisecond); | |
| 209 Expect.equals(0, dt.microsecond); | |
| 210 dt = new DateTime.fromMillisecondsSinceEpoch(-8520285600000, isUtc: true); | |
| 211 Expect.equals(1700, dt.year); | |
| 212 Expect.equals(1, dt.month); | |
| 213 Expect.equals(1, dt.day); | |
| 214 Expect.equals(14, dt.hour); | |
| 215 Expect.equals(0, dt.minute); | |
| 216 Expect.equals(0, dt.second); | |
| 217 Expect.equals(0, dt.millisecond); | |
| 218 Expect.equals(0, dt.microsecond); | |
| 219 dt = new DateTime.fromMillisecondsSinceEpoch(-14831719200000, isUtc: true); | |
| 220 Expect.equals(1500, dt.year); | |
| 221 Expect.equals(1, dt.month); | |
| 222 Expect.equals(1, dt.day); | |
| 223 Expect.equals(14, dt.hour); | |
| 224 Expect.equals(0, dt.minute); | |
| 225 Expect.equals(0, dt.second); | |
| 226 Expect.equals(0, dt.millisecond); | |
| 227 Expect.equals(0, dt.microsecond); | |
| 228 dt = new DateTime.fromMillisecondsSinceEpoch(-59011408800000, isUtc: true); | |
| 229 Expect.equals(100, dt.year); | |
| 230 Expect.equals(1, dt.month); | |
| 231 Expect.equals(1, dt.day); | |
| 232 Expect.equals(14, dt.hour); | |
| 233 Expect.equals(0, dt.minute); | |
| 234 Expect.equals(0, dt.second); | |
| 235 Expect.equals(0, dt.millisecond); | |
| 236 Expect.equals(0, dt.microsecond); | |
| 237 dt = new DateTime.fromMillisecondsSinceEpoch(-62011408800000, isUtc: true); | |
| 238 Expect.equals(4, dt.year); | |
| 239 Expect.equals(12, dt.month); | |
| 240 Expect.equals(8, dt.day); | |
| 241 Expect.equals(8, dt.hour); | |
| 242 Expect.equals(40, dt.minute); | |
| 243 Expect.equals(0, dt.second); | |
| 244 Expect.equals(0, dt.millisecond); | |
| 245 Expect.equals(0, dt.microsecond); | |
| 246 dt = new DateTime.fromMillisecondsSinceEpoch(-64011408800000, isUtc: true); | |
| 247 Expect.equals(-59, dt.year); | |
| 248 Expect.equals(7, dt.month); | |
| 249 Expect.equals(24, dt.day); | |
| 250 Expect.equals(5, dt.hour); | |
| 251 Expect.equals(6, dt.minute); | |
| 252 Expect.equals(40, dt.second); | |
| 253 Expect.equals(0, dt.millisecond); | |
| 254 Expect.equals(0, dt.microsecond); | |
| 255 final int SECONDS_YEAR_2035 = 2051222400; | |
| 256 dt = new DateTime.fromMillisecondsSinceEpoch(SECONDS_YEAR_2035 * 1000 + 1, | |
| 257 isUtc: true); | |
| 258 Expect.equals(2035, dt.year); | |
| 259 Expect.equals(1, dt.month); | |
| 260 Expect.equals(1, dt.day); | |
| 261 Expect.equals(0, dt.hour); | |
| 262 Expect.equals(0, dt.minute); | |
| 263 Expect.equals(0, dt.second); | |
| 264 Expect.equals(1, dt.millisecond); | |
| 265 Expect.equals(0, dt.microsecond); | |
| 266 dt = new DateTime.fromMillisecondsSinceEpoch(SECONDS_YEAR_2035 * 1000 - 1, | |
| 267 isUtc: true); | |
| 268 Expect.equals(2034, dt.year); | |
| 269 Expect.equals(12, dt.month); | |
| 270 Expect.equals(31, dt.day); | |
| 271 Expect.equals(23, dt.hour); | |
| 272 Expect.equals(59, dt.minute); | |
| 273 Expect.equals(59, dt.second); | |
| 274 Expect.equals(999, dt.millisecond); | |
| 275 Expect.equals(0, dt.microsecond); | |
| 276 | |
| 277 dt = new DateTime.utc(2035, 1, 1, 0, 0, 0, 1); | |
| 278 Expect.equals(SECONDS_YEAR_2035 * 1000 + 1, dt.millisecondsSinceEpoch); | |
| 279 dt = new DateTime.utc(2034, 12, 31, 23, 59, 59, 999); | |
| 280 Expect.equals(SECONDS_YEAR_2035 * 1000 - 1, dt.millisecondsSinceEpoch); | |
| 281 dt = new DateTime.fromMillisecondsSinceEpoch(SECONDS_YEAR_2035 * 1000 + 1); | |
| 282 Expect.equals( | |
| 283 true, | |
| 284 (2035 == dt.year && 1 == dt.month && 1 == dt.day) || | |
| 285 (2034 == dt.year && 12 == dt.month && 31 == dt.day)); | |
| 286 Expect.equals(0, dt.second); | |
| 287 Expect.equals(1, dt.millisecond); | |
| 288 DateTime dt2 = new DateTime( | |
| 289 dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.millisecond); | |
| 290 Expect.equals(dt.millisecondsSinceEpoch, dt2.millisecondsSinceEpoch); | |
| 291 dt = new DateTime.fromMillisecondsSinceEpoch(SECONDS_YEAR_2035 * 1000 - 1); | |
| 292 Expect.equals( | |
| 293 true, | |
| 294 (2035 == dt.year && 1 == dt.month && 1 == dt.day) || | |
| 295 (2034 == dt.year && 12 == dt.month && 31 == dt.day)); | |
| 296 Expect.equals(59, dt.second); | |
| 297 Expect.equals(999, dt.millisecond); | |
| 298 Expect.equals(0, dt.microsecond); | |
| 299 | |
| 300 dt2 = new DateTime( | |
| 301 dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.millisecond); | |
| 302 Expect.equals(dt.millisecondsSinceEpoch, dt2.millisecondsSinceEpoch); | |
| 303 dt = new DateTime.fromMillisecondsSinceEpoch(2100000000 * 1000, isUtc: true); | |
| 304 Expect.equals(2036, dt.year); | |
| 305 Expect.equals(7, dt.month); | |
| 306 Expect.equals(18, dt.day); | |
| 307 Expect.equals(13, dt.hour); | |
| 308 Expect.equals(20, dt.minute); | |
| 309 Expect.equals(0, dt.second); | |
| 310 Expect.equals(0, dt.millisecond); | |
| 311 Expect.equals(0, dt.microsecond); | |
| 312 | |
| 313 // Internally this will use the maximum value for the native calls. | |
| 314 dt = new DateTime(2036, 7, 18, 13, 20); | |
| 315 Expect.equals(2036, dt.year); | |
| 316 Expect.equals(7, dt.month); | |
| 317 Expect.equals(18, dt.day); | |
| 318 Expect.equals(13, dt.hour); | |
| 319 Expect.equals(20, dt.minute); | |
| 320 Expect.equals(0, dt.second); | |
| 321 Expect.equals(0, dt.millisecond); | |
| 322 Expect.equals(0, dt.microsecond); | |
| 323 Expect.equals("2036-07-18 13:20:00.000", dt.toString()); | |
| 324 | |
| 325 if (!supportsMicroseconds) return; | |
| 326 | |
| 327 dt = new DateTime.utc(2035, 1, 1, 0, 0, 0, 0, 1); | |
| 328 Expect.equals(SECONDS_YEAR_2035 * 1000000 + 1, dt.microsecondsSinceEpoch); | |
| 329 dt = new DateTime.utc(2034, 12, 31, 23, 59, 59, 999, 999); | |
| 330 Expect.equals(SECONDS_YEAR_2035 * 1000000 - 1, dt.microsecondsSinceEpoch); | |
| 331 dt = new DateTime.fromMicrosecondsSinceEpoch(SECONDS_YEAR_2035 * 1000000 + 1); | |
| 332 Expect.equals( | |
| 333 true, | |
| 334 (2035 == dt.year && 1 == dt.month && 1 == dt.day) || | |
| 335 (2034 == dt.year && 12 == dt.month && 31 == dt.day)); | |
| 336 Expect.equals(0, dt.second); | |
| 337 Expect.equals(0, dt.millisecond); | |
| 338 Expect.equals(1, dt.microsecond); | |
| 339 dt2 = new DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, | |
| 340 dt.millisecond, dt.microsecond); | |
| 341 Expect.equals(dt.microsecondsSinceEpoch, dt2.microsecondsSinceEpoch); | |
| 342 dt = new DateTime.fromMicrosecondsSinceEpoch(SECONDS_YEAR_2035 * 1000000 - 1); | |
| 343 Expect.equals( | |
| 344 true, | |
| 345 (2035 == dt.year && 1 == dt.month && 1 == dt.day) || | |
| 346 (2034 == dt.year && 12 == dt.month && 31 == dt.day)); | |
| 347 Expect.equals(59, dt.second); | |
| 348 Expect.equals(999, dt.millisecond); | |
| 349 Expect.equals(999, dt.microsecond); | |
| 350 | |
| 351 dt2 = new DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, | |
| 352 dt.millisecond, dt.microsecond); | |
| 353 Expect.equals(dt.millisecondsSinceEpoch, dt2.millisecondsSinceEpoch); | |
| 354 dt = new DateTime.fromMicrosecondsSinceEpoch(2100000000 * 1000000, | |
| 355 isUtc: true); | |
| 356 Expect.equals(2036, dt.year); | |
| 357 Expect.equals(7, dt.month); | |
| 358 Expect.equals(18, dt.day); | |
| 359 Expect.equals(13, dt.hour); | |
| 360 Expect.equals(20, dt.minute); | |
| 361 Expect.equals(0, dt.second); | |
| 362 Expect.equals(0, dt.millisecond); | |
| 363 Expect.equals(0, dt.microsecond); | |
| 364 } | |
| 365 | |
| 366 void testExtremes() { | |
| 367 var dt = | |
| 368 new DateTime.fromMillisecondsSinceEpoch(_MAX_MILLISECONDS, isUtc: true); | |
| 369 Expect.equals(275760, dt.year); | |
| 370 Expect.equals(9, dt.month); | |
| 371 Expect.equals(13, dt.day); | |
| 372 Expect.equals(0, dt.hour); | |
| 373 Expect.equals(0, dt.minute); | |
| 374 Expect.equals(0, dt.second); | |
| 375 Expect.equals(0, dt.millisecond); | |
| 376 Expect.equals(0, dt.microsecond); | |
| 377 dt = new DateTime.fromMillisecondsSinceEpoch(-_MAX_MILLISECONDS, isUtc: true); | |
| 378 Expect.equals(-271821, dt.year); | |
| 379 Expect.equals(4, dt.month); | |
| 380 Expect.equals(20, dt.day); | |
| 381 Expect.equals(0, dt.hour); | |
| 382 Expect.equals(0, dt.minute); | |
| 383 Expect.equals(0, dt.second); | |
| 384 Expect.equals(0, dt.millisecond); | |
| 385 Expect.equals(0, dt.microsecond); | |
| 386 // Make sure that we can build the extreme dates in local too. | |
| 387 dt = new DateTime.fromMillisecondsSinceEpoch(_MAX_MILLISECONDS); | |
| 388 dt = new DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute); | |
| 389 Expect.equals(_MAX_MILLISECONDS, dt.millisecondsSinceEpoch); | |
| 390 dt = new DateTime.fromMillisecondsSinceEpoch(-_MAX_MILLISECONDS); | |
| 391 dt = new DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute); | |
| 392 Expect.equals(-_MAX_MILLISECONDS, dt.millisecondsSinceEpoch); | |
| 393 Expect.throws(() => new DateTime.fromMillisecondsSinceEpoch( | |
| 394 _MAX_MILLISECONDS + 1, | |
| 395 isUtc: true)); | |
| 396 Expect.throws(() => new DateTime.fromMillisecondsSinceEpoch( | |
| 397 -_MAX_MILLISECONDS - 1, | |
| 398 isUtc: true)); | |
| 399 Expect.throws( | |
| 400 () => new DateTime.fromMillisecondsSinceEpoch(_MAX_MILLISECONDS + 1)); | |
| 401 Expect.throws( | |
| 402 () => new DateTime.fromMillisecondsSinceEpoch(-_MAX_MILLISECONDS - 1)); | |
| 403 dt = new DateTime.fromMillisecondsSinceEpoch(_MAX_MILLISECONDS); | |
| 404 Expect.throws( | |
| 405 () => new DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute, 0, 1)); | |
| 406 dt = new DateTime.fromMillisecondsSinceEpoch(_MAX_MILLISECONDS, isUtc: true); | |
| 407 Expect.throws(() => | |
| 408 new DateTime.utc(dt.year, dt.month, dt.day, dt.hour, dt.minute, 0, 1)); | |
| 409 dt = new DateTime.fromMillisecondsSinceEpoch(-_MAX_MILLISECONDS); | |
| 410 Expect.throws( | |
| 411 () => new DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute, 0, -1)); | |
| 412 dt = new DateTime.fromMillisecondsSinceEpoch(-_MAX_MILLISECONDS, isUtc: true); | |
| 413 Expect.throws(() => | |
| 414 new DateTime.utc(dt.year, dt.month, dt.day, dt.hour, dt.minute, 0, -1)); | |
| 415 | |
| 416 if (!supportsMicroseconds) return; | |
| 417 | |
| 418 dt = new DateTime.fromMicrosecondsSinceEpoch(_MAX_MILLISECONDS * 1000); | |
| 419 dt = new DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute); | |
| 420 Expect.equals(_MAX_MILLISECONDS * 1000, dt.microsecondsSinceEpoch); | |
| 421 dt = new DateTime.fromMicrosecondsSinceEpoch(-_MAX_MILLISECONDS * 1000); | |
| 422 dt = new DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute); | |
| 423 Expect.equals(-_MAX_MILLISECONDS * 1000, dt.microsecondsSinceEpoch); | |
| 424 Expect.throws(() => new DateTime.fromMicrosecondsSinceEpoch( | |
| 425 _MAX_MILLISECONDS * 1000 + 1, | |
| 426 isUtc: true)); | |
| 427 Expect.throws(() => new DateTime.fromMicrosecondsSinceEpoch( | |
| 428 -_MAX_MILLISECONDS * 1000 - 1, | |
| 429 isUtc: true)); | |
| 430 Expect.throws(() => | |
| 431 new DateTime.fromMicrosecondsSinceEpoch(_MAX_MILLISECONDS * 1000 + 1)); | |
| 432 Expect.throws(() => | |
| 433 new DateTime.fromMicrosecondsSinceEpoch(-_MAX_MILLISECONDS * 1000 - 1)); | |
| 434 dt = new DateTime.fromMillisecondsSinceEpoch(_MAX_MILLISECONDS); | |
| 435 Expect.throws(() => | |
| 436 new DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute, 0, 0, 1)); | |
| 437 dt = new DateTime.fromMillisecondsSinceEpoch(_MAX_MILLISECONDS, isUtc: true); | |
| 438 Expect.throws(() => | |
| 439 new DateTime.utc(dt.year, dt.month, dt.day, dt.hour, dt.minute, 0, 0, 1)); | |
| 440 dt = new DateTime.fromMillisecondsSinceEpoch(-_MAX_MILLISECONDS); | |
| 441 Expect.throws(() => | |
| 442 new DateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute, 0, 0, -1)); | |
| 443 dt = new DateTime.fromMillisecondsSinceEpoch(-_MAX_MILLISECONDS, isUtc: true); | |
| 444 Expect.throws(() => new DateTime.utc( | |
| 445 dt.year, dt.month, dt.day, dt.hour, dt.minute, 0, 0, -1)); | |
| 446 } | |
| 447 | |
| 448 void testUTCGetters() { | |
| 449 var dt = new DateTime.fromMillisecondsSinceEpoch(1305140315000, isUtc: true); | |
| 450 Expect.equals(2011, dt.year); | |
| 451 Expect.equals(5, dt.month); | |
| 452 Expect.equals(11, dt.day); | |
| 453 Expect.equals(18, dt.hour); | |
| 454 Expect.equals(58, dt.minute); | |
| 455 Expect.equals(35, dt.second); | |
| 456 Expect.equals(0, dt.millisecond); | |
| 457 Expect.equals(0, dt.microsecond); | |
| 458 Expect.equals(true, dt.isUtc); | |
| 459 Expect.equals(1305140315000, dt.millisecondsSinceEpoch); | |
| 460 dt = new DateTime.fromMillisecondsSinceEpoch(-9999999, isUtc: true); | |
| 461 Expect.equals(1969, dt.year); | |
| 462 Expect.equals(12, dt.month); | |
| 463 Expect.equals(31, dt.day); | |
| 464 Expect.equals(21, dt.hour); | |
| 465 Expect.equals(13, dt.minute); | |
| 466 Expect.equals(20, dt.second); | |
| 467 Expect.equals(1, dt.millisecond); | |
| 468 Expect.equals(0, dt.microsecond); | |
| 469 | |
| 470 if (!supportsMicroseconds) return; | |
| 471 | |
| 472 dt = new DateTime.fromMicrosecondsSinceEpoch(-9999999999, isUtc: true); | |
| 473 Expect.equals(1969, dt.year); | |
| 474 Expect.equals(12, dt.month); | |
| 475 Expect.equals(31, dt.day); | |
| 476 Expect.equals(21, dt.hour); | |
| 477 Expect.equals(13, dt.minute); | |
| 478 Expect.equals(20, dt.second); | |
| 479 Expect.equals(0, dt.millisecond); | |
| 480 Expect.equals(1, dt.microsecond); | |
| 481 } | |
| 482 | |
| 483 void testLocalGetters() { | |
| 484 var dt1 = new DateTime.fromMillisecondsSinceEpoch(1305140315000); | |
| 485 var dt2 = new DateTime.utc(dt1.year, dt1.month, dt1.day, dt1.hour, dt1.minute, | |
| 486 dt1.second, dt1.millisecond, dt1.microsecond); | |
| 487 Duration zoneOffset = dt1.difference(dt2); | |
| 488 Expect.equals(true, zoneOffset.inDays == 0); | |
| 489 Expect.equals(true, zoneOffset.inHours.abs() <= 12); | |
| 490 Expect.equals(dt1.year, dt2.year); | |
| 491 Expect.equals(dt1.month, dt2.month); | |
| 492 Expect.equals(true, (dt1.day - dt2.day).abs() <= 1); | |
| 493 Expect.equals(true, dt1.hour < 24); | |
| 494 // There are timezones with 0.5 or 0.25 hour offsets. | |
| 495 Expect.equals( | |
| 496 true, | |
| 497 (dt1.minute == dt2.minute) || | |
| 498 ((dt1.minute - dt2.minute).abs() == 30) || | |
| 499 ((dt1.minute - dt2.minute).abs() == 15)); | |
| 500 Expect.equals(dt1.second, dt2.second); | |
| 501 Expect.equals(dt1.millisecond, dt2.millisecond); | |
| 502 Expect.equals(dt1.microsecond, dt2.microsecond); | |
| 503 } | |
| 504 | |
| 505 void testConstructors() { | |
| 506 var dt0 = new DateTime.utc(2011, 5, 11, 18, 58, 35, 0, 0); | |
| 507 var dt0b = new DateTime.utc(2011, 5, 11, 18, 58, 35, 0, 0).toLocal(); | |
| 508 Expect.equals(1305140315000, dt0.millisecondsSinceEpoch); | |
| 509 var dt1 = new DateTime.fromMillisecondsSinceEpoch(1305140315000); | |
| 510 Expect.equals(dt1.millisecondsSinceEpoch, dt0.millisecondsSinceEpoch); | |
| 511 Expect.equals(dt1.microsecondsSinceEpoch, dt0.microsecondsSinceEpoch); | |
| 512 Expect.equals(false, dt1 == dt0); | |
| 513 Expect.equals(true, dt1 == dt0b); | |
| 514 var dt3 = new DateTime(dt1.year, dt1.month, dt1.day, dt1.hour, dt1.minute, | |
| 515 dt1.second, dt1.millisecond, dt1.microsecond); | |
| 516 Expect.equals(dt1.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch); | |
| 517 Expect.equals(dt1.microsecondsSinceEpoch, dt3.microsecondsSinceEpoch); | |
| 518 Expect.equals(false, dt3 == dt0); | |
| 519 Expect.equals(true, dt1 == dt3); | |
| 520 dt3 = new DateTime(dt1.year, dt1.month, dt1.day, dt1.hour, dt1.minute, | |
| 521 dt1.second, dt1.millisecond, dt1.microsecond); | |
| 522 Expect.equals(dt1.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch); | |
| 523 Expect.equals(dt1.microsecondsSinceEpoch, dt3.microsecondsSinceEpoch); | |
| 524 Expect.equals(true, dt1 == dt3); | |
| 525 var dt2 = dt1.toLocal(); | |
| 526 dt3 = new DateTime(2011, 5, dt1.day, dt1.hour, dt1.minute, 35, 0, 0); | |
| 527 Expect.equals(dt2.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch); | |
| 528 Expect.equals(dt2.microsecondsSinceEpoch, dt3.microsecondsSinceEpoch); | |
| 529 Expect.equals(true, dt2 == dt3); | |
| 530 dt1 = new DateTime.fromMillisecondsSinceEpoch(-9999999, isUtc: true); | |
| 531 dt3 = new DateTime.utc(dt1.year, dt1.month, dt1.day, dt1.hour, dt1.minute, | |
| 532 dt1.second, dt1.millisecond); | |
| 533 Expect.equals(dt1.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch); | |
| 534 Expect.equals(dt1.microsecondsSinceEpoch, dt3.microsecondsSinceEpoch); | |
| 535 dt3 = new DateTime.utc(99, 1, 2, 10, 11, 12, 0); | |
| 536 Expect.equals(99, dt3.year); | |
| 537 Expect.equals(1, dt3.month); | |
| 538 Expect.equals(2, dt3.day); | |
| 539 Expect.equals(10, dt3.hour); | |
| 540 Expect.equals(11, dt3.minute); | |
| 541 Expect.equals(12, dt3.second); | |
| 542 Expect.equals(0, dt3.millisecond); | |
| 543 Expect.equals(0, dt3.microsecond); | |
| 544 Expect.equals(true, dt3.isUtc); | |
| 545 var dt4 = new DateTime(99, 1, 2); | |
| 546 Expect.equals(99, dt4.year); | |
| 547 Expect.equals(1, dt4.month); | |
| 548 Expect.equals(2, dt4.day); | |
| 549 Expect.equals(0, dt4.hour); | |
| 550 Expect.equals(0, dt4.minute); | |
| 551 Expect.equals(0, dt4.second); | |
| 552 Expect.equals(0, dt4.millisecond); | |
| 553 Expect.equals(0, dt4.microsecond); | |
| 554 Expect.isFalse(dt4.isUtc); | |
| 555 var dt5 = new DateTime.utc(99, 1, 2); | |
| 556 Expect.equals(99, dt5.year); | |
| 557 Expect.equals(1, dt5.month); | |
| 558 Expect.equals(2, dt5.day); | |
| 559 Expect.equals(0, dt5.hour); | |
| 560 Expect.equals(0, dt5.minute); | |
| 561 Expect.equals(0, dt5.second); | |
| 562 Expect.equals(0, dt5.millisecond); | |
| 563 Expect.equals(0, dt5.microsecond); | |
| 564 Expect.isTrue(dt5.isUtc); | |
| 565 var dt6 = new DateTime(2012, 2, 27, 13, 27, 0); | |
| 566 Expect.equals(2012, dt6.year); | |
| 567 Expect.equals(2, dt6.month); | |
| 568 Expect.equals(27, dt6.day); | |
| 569 Expect.equals(13, dt6.hour); | |
| 570 Expect.equals(27, dt6.minute); | |
| 571 Expect.equals(0, dt6.second); | |
| 572 Expect.equals(0, dt6.millisecond); | |
| 573 Expect.equals(0, dt6.microsecond); | |
| 574 Expect.isFalse(dt6.isUtc); | |
| 575 var dt7 = new DateTime.utc(2012, 2, 27, 13, 27, 0); | |
| 576 Expect.equals(2012, dt7.year); | |
| 577 Expect.equals(2, dt7.month); | |
| 578 Expect.equals(27, dt7.day); | |
| 579 Expect.equals(13, dt7.hour); | |
| 580 Expect.equals(27, dt7.minute); | |
| 581 Expect.equals(0, dt7.second); | |
| 582 Expect.equals(0, dt7.millisecond); | |
| 583 Expect.equals(0, dt7.microsecond); | |
| 584 Expect.isTrue(dt7.isUtc); | |
| 585 } | |
| 586 | |
| 587 void testChangeTimeZone() { | |
| 588 var dt1 = new DateTime.fromMillisecondsSinceEpoch(1305140315000); | |
| 589 var dt2 = dt1.toUtc(); | |
| 590 Expect.equals(dt1.millisecondsSinceEpoch, dt2.millisecondsSinceEpoch); | |
| 591 var dt3 = new DateTime.fromMillisecondsSinceEpoch(1305140315000, isUtc: true); | |
| 592 Expect.equals(dt1.millisecondsSinceEpoch, dt3.millisecondsSinceEpoch); | |
| 593 Expect.equals(dt2.year, dt3.year); | |
| 594 Expect.equals(dt2.month, dt3.month); | |
| 595 Expect.equals(dt2.day, dt3.day); | |
| 596 Expect.equals(dt2.hour, dt3.hour); | |
| 597 Expect.equals(dt2.minute, dt3.minute); | |
| 598 Expect.equals(dt2.second, dt3.second); | |
| 599 Expect.equals(dt2.millisecond, dt3.millisecond); | |
| 600 Expect.equals(dt2.microsecond, dt3.microsecond); | |
| 601 var dt4 = dt3.toLocal(); | |
| 602 Expect.equals(dt1.year, dt4.year); | |
| 603 Expect.equals(dt1.month, dt4.month); | |
| 604 Expect.equals(dt1.day, dt4.day); | |
| 605 Expect.equals(dt1.hour, dt4.hour); | |
| 606 Expect.equals(dt1.minute, dt4.minute); | |
| 607 Expect.equals(dt1.second, dt4.second); | |
| 608 Expect.equals(dt1.millisecond, dt4.millisecond); | |
| 609 Expect.equals(dt1.microsecond, dt4.microsecond); | |
| 610 } | |
| 611 | |
| 612 void testSubAdd() { | |
| 613 var dt1 = new DateTime.fromMillisecondsSinceEpoch(1305140315000, isUtc: true); | |
| 614 var dt2 = dt1.add( | |
| 615 new Duration(milliseconds: 3 * Duration.MILLISECONDS_PER_SECOND + 5)); | |
| 616 Expect.equals(dt1.year, dt2.year); | |
| 617 Expect.equals(dt1.month, dt2.month); | |
| 618 Expect.equals(dt1.day, dt2.day); | |
| 619 Expect.equals(dt1.hour, dt2.hour); | |
| 620 Expect.equals(dt1.minute, dt2.minute); | |
| 621 Expect.equals(dt1.second + 3, dt2.second); | |
| 622 Expect.equals(dt1.millisecond + 5, dt2.millisecond); | |
| 623 Expect.equals(dt1.microsecond, dt2.microsecond); | |
| 624 var dt3 = dt2.subtract( | |
| 625 new Duration(milliseconds: 3 * Duration.MILLISECONDS_PER_SECOND + 5)); | |
| 626 Expect.equals(true, dt1 == dt3); | |
| 627 Expect.equals(false, dt1 == dt2); | |
| 628 | |
| 629 if (!supportsMicroseconds) return; | |
| 630 | |
| 631 dt1 = new DateTime.fromMillisecondsSinceEpoch(1305140315000, isUtc: true); | |
| 632 dt2 = dt1.add( | |
| 633 new Duration(microseconds: 3 * Duration.MICROSECONDS_PER_SECOND + 5)); | |
| 634 Expect.equals(dt1.year, dt2.year); | |
| 635 Expect.equals(dt1.month, dt2.month); | |
| 636 Expect.equals(dt1.day, dt2.day); | |
| 637 Expect.equals(dt1.hour, dt2.hour); | |
| 638 Expect.equals(dt1.minute, dt2.minute); | |
| 639 Expect.equals(dt1.second + 3, dt2.second); | |
| 640 Expect.equals(dt1.millisecond, dt2.millisecond); | |
| 641 Expect.equals(dt1.microsecond + 5, dt2.microsecond); | |
| 642 dt3 = dt2.subtract( | |
| 643 new Duration(microseconds: 3 * Duration.MICROSECONDS_PER_SECOND + 5)); | |
| 644 Expect.equals(true, dt1 == dt3); | |
| 645 Expect.equals(false, dt1 == dt2); | |
| 646 } | |
| 647 | |
| 648 void testUnderflowAndOverflow() { | |
| 649 int microsecond = supportsMicroseconds ? 499 : 0; | |
| 650 final dtBase = new DateTime(2012, 6, 20, 12, 30, 30, 500, microsecond); | |
| 651 | |
| 652 // Millisecond | |
| 653 print(" >>> Millisecond+"); | |
| 654 var dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour, | |
| 655 dtBase.minute, dtBase.second, 1000, dtBase.microsecond); | |
| 656 Expect.equals(dtBase.year, dt.year); | |
| 657 Expect.equals(dtBase.month, dt.month); | |
| 658 Expect.equals(dtBase.day, dt.day); | |
| 659 Expect.equals(dtBase.hour, dt.hour); | |
| 660 Expect.equals(dtBase.minute, dt.minute); | |
| 661 Expect.equals(dtBase.second + 1, dt.second); | |
| 662 Expect.equals(0, dt.millisecond); | |
| 663 Expect.equals(dtBase.microsecond, dt.microsecond); | |
| 664 | |
| 665 print(" >>> Millisecond-"); | |
| 666 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour, | |
| 667 dtBase.minute, dtBase.second, -1000, dtBase.microsecond); | |
| 668 Expect.equals(dtBase.year, dt.year); | |
| 669 Expect.equals(dtBase.month, dt.month); | |
| 670 Expect.equals(dtBase.day, dt.day); | |
| 671 Expect.equals(dtBase.hour, dt.hour); | |
| 672 Expect.equals(dtBase.minute, dt.minute); | |
| 673 Expect.equals(dtBase.second - 1, dt.second); | |
| 674 Expect.equals(0, dt.millisecond); | |
| 675 Expect.equals(dtBase.microsecond, dt.microsecond); | |
| 676 | |
| 677 // Second | |
| 678 print(" >>> Second+"); | |
| 679 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour, | |
| 680 dtBase.minute, 60, dtBase.millisecond, dtBase.microsecond); | |
| 681 Expect.equals(dtBase.year, dt.year); | |
| 682 Expect.equals(dtBase.month, dt.month); | |
| 683 Expect.equals(dtBase.day, dt.day); | |
| 684 Expect.equals(dtBase.hour, dt.hour); | |
| 685 Expect.equals(dtBase.minute + 1, dt.minute); | |
| 686 Expect.equals(0, dt.second); | |
| 687 Expect.equals(dtBase.millisecond, dt.millisecond); | |
| 688 Expect.equals(dtBase.microsecond, dt.microsecond); | |
| 689 | |
| 690 print(" >>> Second-"); | |
| 691 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour, | |
| 692 dtBase.minute, -60, dtBase.millisecond, dtBase.microsecond); | |
| 693 Expect.equals(dtBase.year, dt.year); | |
| 694 Expect.equals(dtBase.month, dt.month); | |
| 695 Expect.equals(dtBase.day, dt.day); | |
| 696 Expect.equals(dtBase.hour, dt.hour); | |
| 697 Expect.equals(dtBase.minute - 1, dt.minute); | |
| 698 Expect.equals(0, dt.second); | |
| 699 Expect.equals(dtBase.millisecond, dt.millisecond); | |
| 700 Expect.equals(dtBase.microsecond, dt.microsecond); | |
| 701 | |
| 702 // Minute | |
| 703 print(" >>> Minute+"); | |
| 704 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour, 60, | |
| 705 dtBase.second, dtBase.millisecond, dtBase.microsecond); | |
| 706 Expect.equals(dtBase.year, dt.year); | |
| 707 Expect.equals(dtBase.month, dt.month); | |
| 708 Expect.equals(dtBase.day, dt.day); | |
| 709 Expect.equals(dtBase.hour + 1, dt.hour); | |
| 710 Expect.equals(0, dt.minute); | |
| 711 Expect.equals(dtBase.second, dt.second); | |
| 712 Expect.equals(dtBase.millisecond, dt.millisecond); | |
| 713 Expect.equals(dtBase.microsecond, dt.microsecond); | |
| 714 | |
| 715 print(" >>> Minute-"); | |
| 716 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour, -60, | |
| 717 dtBase.second, dtBase.millisecond, dtBase.microsecond); | |
| 718 Expect.equals(dtBase.year, dt.year); | |
| 719 Expect.equals(dtBase.month, dt.month); | |
| 720 Expect.equals(dtBase.day, dt.day); | |
| 721 Expect.equals(dtBase.hour - 1, dt.hour); | |
| 722 Expect.equals(0, dt.minute); | |
| 723 Expect.equals(dtBase.second, dt.second); | |
| 724 Expect.equals(dtBase.millisecond, dt.millisecond); | |
| 725 Expect.equals(dtBase.microsecond, dt.microsecond); | |
| 726 | |
| 727 // Hour | |
| 728 print(" >>> Hour+"); | |
| 729 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, 24, dtBase.minute, | |
| 730 dtBase.second, dtBase.millisecond, dtBase.microsecond); | |
| 731 Expect.equals(dtBase.year, dt.year); | |
| 732 Expect.equals(dtBase.month, dt.month); | |
| 733 Expect.equals(dtBase.day + 1, dt.day); | |
| 734 Expect.equals(0, dt.hour); | |
| 735 Expect.equals(dtBase.minute, dt.minute); | |
| 736 Expect.equals(dtBase.second, dt.second); | |
| 737 Expect.equals(dtBase.millisecond, dt.millisecond); | |
| 738 Expect.equals(dtBase.microsecond, dt.microsecond); | |
| 739 | |
| 740 print(" >>> Hour-"); | |
| 741 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, -24, dtBase.minute, | |
| 742 dtBase.second, dtBase.millisecond, dtBase.microsecond); | |
| 743 Expect.equals(dtBase.year, dt.year); | |
| 744 Expect.equals(dtBase.month, dt.month); | |
| 745 Expect.equals(dtBase.day - 1, dt.day); | |
| 746 Expect.equals(0, dt.hour); | |
| 747 Expect.equals(dtBase.minute, dt.minute); | |
| 748 Expect.equals(dtBase.second, dt.second); | |
| 749 Expect.equals(dtBase.millisecond, dt.millisecond); | |
| 750 Expect.equals(dtBase.microsecond, dt.microsecond); | |
| 751 | |
| 752 // Day | |
| 753 print(" >>> Day+"); | |
| 754 dt = new DateTime(dtBase.year, dtBase.month, 31, dtBase.hour, dtBase.minute, | |
| 755 dtBase.second, dtBase.millisecond, dtBase.microsecond); | |
| 756 Expect.equals(dtBase.year, dt.year); | |
| 757 Expect.equals(dtBase.month + 1, dt.month); | |
| 758 Expect.equals(1, dt.day); | |
| 759 Expect.equals(dtBase.hour, dt.hour); | |
| 760 Expect.equals(dtBase.minute, dt.minute); | |
| 761 Expect.equals(dtBase.second, dt.second); | |
| 762 Expect.equals(dtBase.millisecond, dt.millisecond); | |
| 763 Expect.equals(dtBase.microsecond, dt.microsecond); | |
| 764 | |
| 765 print(" >>> Day-"); | |
| 766 dt = new DateTime(dtBase.year, dtBase.month, -30, dtBase.hour, dtBase.minute, | |
| 767 dtBase.second, dtBase.millisecond, dtBase.microsecond); | |
| 768 Expect.equals(dtBase.year, dt.year); | |
| 769 Expect.equals(dtBase.month - 1, dt.month); | |
| 770 Expect.equals(1, dt.day); | |
| 771 Expect.equals(dtBase.hour, dt.hour); | |
| 772 Expect.equals(dtBase.minute, dt.minute); | |
| 773 Expect.equals(dtBase.second, dt.second); | |
| 774 Expect.equals(dtBase.millisecond, dt.millisecond); | |
| 775 Expect.equals(dtBase.microsecond, dt.microsecond); | |
| 776 | |
| 777 // Month | |
| 778 print(" >>> Month+"); | |
| 779 dt = new DateTime(dtBase.year, 13, dtBase.day, dtBase.hour, dtBase.minute, | |
| 780 dtBase.second, dtBase.millisecond, dtBase.microsecond); | |
| 781 Expect.equals(dtBase.year + 1, dt.year); | |
| 782 Expect.equals(1, dt.month); | |
| 783 Expect.equals(dtBase.day, dt.day); | |
| 784 Expect.equals(dtBase.hour, dt.hour); | |
| 785 Expect.equals(dtBase.minute, dt.minute); | |
| 786 Expect.equals(dtBase.second, dt.second); | |
| 787 Expect.equals(dtBase.millisecond, dt.millisecond); | |
| 788 Expect.equals(dtBase.microsecond, dt.microsecond); | |
| 789 | |
| 790 print(" >>> Month-"); | |
| 791 dt = new DateTime(dtBase.year, -11, dtBase.day, dtBase.hour, dtBase.minute, | |
| 792 dtBase.second, dtBase.millisecond, dtBase.microsecond); | |
| 793 Expect.equals(dtBase.year - 1, dt.year); | |
| 794 Expect.equals(1, dt.month); | |
| 795 Expect.equals(dtBase.day, dt.day); | |
| 796 Expect.equals(dtBase.hour, dt.hour); | |
| 797 Expect.equals(dtBase.minute, dt.minute); | |
| 798 Expect.equals(dtBase.second, dt.second); | |
| 799 Expect.equals(dtBase.millisecond, dt.millisecond); | |
| 800 Expect.equals(dtBase.microsecond, dt.microsecond); | |
| 801 | |
| 802 // Flowing all the way up the chain. | |
| 803 print(" >>> Flow+"); | |
| 804 var dtBase1 = new DateTime(2012, 12, 31, 23, 59, 59, 999, 000); | |
| 805 var dtTick = new DateTime( | |
| 806 dtBase1.year, | |
| 807 dtBase1.month, | |
| 808 dtBase1.day, | |
| 809 dtBase1.hour, | |
| 810 dtBase1.minute, | |
| 811 dtBase1.second, | |
| 812 dtBase1.millisecond + 1, | |
| 813 dtBase1.microsecond); | |
| 814 Expect.equals(dtBase1.year + 1, dtTick.year); | |
| 815 Expect.equals(1, dtTick.month); | |
| 816 Expect.equals(1, dtTick.day); | |
| 817 Expect.equals(0, dtTick.hour); | |
| 818 Expect.equals(0, dtTick.minute); | |
| 819 Expect.equals(0, dtTick.second); | |
| 820 Expect.equals(0, dtTick.millisecond); | |
| 821 Expect.equals(0, dtTick.microsecond); | |
| 822 | |
| 823 print(" >>> Flow-"); | |
| 824 dtBase1 = new DateTime(2012, 1, 1, 0, 0, 0, 0); | |
| 825 dtTick = new DateTime( | |
| 826 dtBase1.year, | |
| 827 dtBase1.month, | |
| 828 dtBase1.day, | |
| 829 dtBase1.hour, | |
| 830 dtBase1.minute, | |
| 831 dtBase1.second, | |
| 832 dtBase1.millisecond - 1, | |
| 833 dtBase1.microsecond); | |
| 834 Expect.equals(dtBase1.year - 1, dtTick.year); | |
| 835 Expect.equals(12, dtTick.month); | |
| 836 Expect.equals(31, dtTick.day); | |
| 837 Expect.equals(23, dtTick.hour); | |
| 838 Expect.equals(59, dtTick.minute); | |
| 839 Expect.equals(59, dtTick.second); | |
| 840 Expect.equals(999, dtTick.millisecond); | |
| 841 Expect.equals(0, dtTick.microsecond); | |
| 842 | |
| 843 print(" >>> extra underflow"); | |
| 844 dtTick = new DateTime(dtBase1.year, dtBase1.month, dtBase1.day, -17520, | |
| 845 dtBase1.minute, dtBase1.second, dtBase1.millisecond, dtBase1.microsecond); | |
| 846 Expect.equals(dtBase1.year - 2, dtTick.year); | |
| 847 Expect.equals(dtBase1.month, dtTick.month); | |
| 848 Expect.equals(dtBase1.day, dtTick.day); | |
| 849 Expect.equals(dtBase1.hour, dtTick.hour); | |
| 850 Expect.equals(dtBase1.minute, dtTick.minute); | |
| 851 Expect.equals(dtBase1.second, dtTick.second); | |
| 852 Expect.equals(dtBase1.millisecond, dtTick.millisecond); | |
| 853 Expect.equals(dtBase1.microsecond, dtTick.microsecond); | |
| 854 | |
| 855 if (!supportsMicroseconds) return; | |
| 856 | |
| 857 // Microsecond | |
| 858 print(" >>> Microsecond+"); | |
| 859 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour, | |
| 860 dtBase.minute, dtBase.second, dtBase.millisecond, 1000); | |
| 861 Expect.equals(dtBase.year, dt.year); | |
| 862 Expect.equals(dtBase.month, dt.month); | |
| 863 Expect.equals(dtBase.day, dt.day); | |
| 864 Expect.equals(dtBase.hour, dt.hour); | |
| 865 Expect.equals(dtBase.minute, dt.minute); | |
| 866 Expect.equals(dtBase.second, dt.second); | |
| 867 Expect.equals(dtBase.millisecond + 1, dt.millisecond); | |
| 868 Expect.equals(0, dt.microsecond); | |
| 869 | |
| 870 print(" >>> Microsecond-"); | |
| 871 dt = new DateTime(dtBase.year, dtBase.month, dtBase.day, dtBase.hour, | |
| 872 dtBase.minute, dtBase.second, dtBase.millisecond, -1000); | |
| 873 Expect.equals(dtBase.year, dt.year); | |
| 874 Expect.equals(dtBase.month, dt.month); | |
| 875 Expect.equals(dtBase.day, dt.day); | |
| 876 Expect.equals(dtBase.hour, dt.hour); | |
| 877 Expect.equals(dtBase.minute, dt.minute); | |
| 878 Expect.equals(dtBase.second, dt.second); | |
| 879 Expect.equals(dtBase.millisecond - 1, dt.millisecond); | |
| 880 Expect.equals(0, dt.microsecond); | |
| 881 | |
| 882 // Flowing all the way up the chain. | |
| 883 print(" >>> Flow+ 2"); | |
| 884 dtBase1 = new DateTime(2012, 12, 31, 23, 59, 59, 999, 999); | |
| 885 dtTick = new DateTime( | |
| 886 dtBase1.year, | |
| 887 dtBase1.month, | |
| 888 dtBase1.day, | |
| 889 dtBase1.hour, | |
| 890 dtBase1.minute, | |
| 891 dtBase1.second, | |
| 892 dtBase1.millisecond, | |
| 893 dtBase1.microsecond + 1); | |
| 894 Expect.equals(dtBase1.year + 1, dtTick.year); | |
| 895 Expect.equals(1, dtTick.month); | |
| 896 Expect.equals(1, dtTick.day); | |
| 897 Expect.equals(0, dtTick.hour); | |
| 898 Expect.equals(0, dtTick.minute); | |
| 899 Expect.equals(0, dtTick.second); | |
| 900 Expect.equals(0, dtTick.millisecond); | |
| 901 Expect.equals(0, dtTick.microsecond); | |
| 902 | |
| 903 print(" >>> Flow- 2"); | |
| 904 dtBase1 = new DateTime(2012, 1, 1, 0, 0, 0, 0, 0); | |
| 905 dtTick = new DateTime( | |
| 906 dtBase1.year, | |
| 907 dtBase1.month, | |
| 908 dtBase1.day, | |
| 909 dtBase1.hour, | |
| 910 dtBase1.minute, | |
| 911 dtBase1.second, | |
| 912 dtBase1.millisecond, | |
| 913 dtBase1.microsecond - 1); | |
| 914 Expect.equals(dtBase1.year - 1, dtTick.year); | |
| 915 Expect.equals(12, dtTick.month); | |
| 916 Expect.equals(31, dtTick.day); | |
| 917 Expect.equals(23, dtTick.hour); | |
| 918 Expect.equals(59, dtTick.minute); | |
| 919 Expect.equals(59, dtTick.second); | |
| 920 Expect.equals(999, dtTick.millisecond); | |
| 921 Expect.equals(999, dtTick.microsecond); | |
| 922 } | |
| 923 | |
| 924 void testDateStrings() { | |
| 925 // TODO(floitsch): Clean up the DateTime API that deals with strings. | |
| 926 var dt1 = DateTime.parse("2011-05-11 18:58:35Z"); | |
| 927 Expect.equals(1305140315000, dt1.millisecondsSinceEpoch); | |
| 928 Expect.isTrue(dt1.isUtc); | |
| 929 dt1 = DateTime.parse("20110511 18:58:35z"); | |
| 930 Expect.equals(1305140315000, dt1.millisecondsSinceEpoch); | |
| 931 Expect.isTrue(dt1.isUtc); | |
| 932 dt1 = DateTime.parse("+20110511 18:58:35z"); | |
| 933 Expect.equals(1305140315000, dt1.millisecondsSinceEpoch); | |
| 934 Expect.isTrue(dt1.isUtc); | |
| 935 var str = dt1.toString(); | |
| 936 var dt2 = DateTime.parse(str); | |
| 937 Expect.equals(true, dt1 == dt2); | |
| 938 var dt3 = dt1.toUtc(); | |
| 939 str = dt3.toString(); | |
| 940 Expect.equals("2011-05-11 18:58:35.000Z", str); | |
| 941 var dt4 = DateTime.parse("-1234-01-01 00:00:00Z"); | |
| 942 Expect.equals(-1234, dt4.year); | |
| 943 Expect.equals(1, dt4.month); | |
| 944 Expect.equals(1, dt4.day); | |
| 945 Expect.equals(0, dt4.hour); | |
| 946 Expect.equals(0, dt4.minute); | |
| 947 Expect.equals(0, dt4.second); | |
| 948 Expect.equals(0, dt4.millisecond); | |
| 949 Expect.equals(0, dt4.microsecond); | |
| 950 Expect.isTrue(dt4.isUtc); | |
| 951 var dt5 = DateTime.parse("0099-01-02"); | |
| 952 Expect.equals(99, dt5.year); | |
| 953 Expect.equals(1, dt5.month); | |
| 954 Expect.equals(2, dt5.day); | |
| 955 Expect.equals(0, dt5.hour); | |
| 956 Expect.equals(0, dt5.minute); | |
| 957 Expect.equals(0, dt5.second); | |
| 958 Expect.equals(0, dt5.millisecond); | |
| 959 Expect.equals(0, dt5.microsecond); | |
| 960 Expect.isFalse(dt5.isUtc); | |
| 961 var dt6 = DateTime.parse("2012-01-01 00:00:10.012"); | |
| 962 Expect.equals(12, dt6.millisecond); | |
| 963 Expect.equals(0, dt6.microsecond); | |
| 964 dt6 = DateTime.parse("2012-01-01 00:00:10.003"); | |
| 965 Expect.equals(3, dt6.millisecond); | |
| 966 Expect.equals(0, dt6.microsecond); | |
| 967 dt6 = DateTime.parse("2012-01-01 00:00:10.5"); | |
| 968 Expect.equals(500, dt6.millisecond); | |
| 969 Expect.equals(0, dt6.microsecond); | |
| 970 dt6 = DateTime.parse("2012-01-01 00:00:10.003Z"); | |
| 971 Expect.equals(3, dt6.millisecond); | |
| 972 Expect.equals(0, dt6.microsecond); | |
| 973 dt6 = DateTime.parse("2012-01-01 00:00:10.5z"); | |
| 974 Expect.equals(500, dt6.millisecond); | |
| 975 Expect.equals(0, dt6.microsecond); | |
| 976 var dt7 = DateTime.parse("2011-05-11T18:58:35Z"); | |
| 977 Expect.equals(1305140315000, dt7.millisecondsSinceEpoch); | |
| 978 var dt8 = DateTime.parse("-1234-01-01T00:00:00Z"); | |
| 979 Expect.equals(-1234, dt8.year); | |
| 980 Expect.equals(1, dt8.month); | |
| 981 Expect.equals(1, dt8.day); | |
| 982 Expect.equals(0, dt8.hour); | |
| 983 Expect.equals(0, dt8.minute); | |
| 984 Expect.equals(0, dt8.second); | |
| 985 Expect.equals(0, dt8.millisecond); | |
| 986 Expect.equals(0, dt8.microsecond); | |
| 987 Expect.isTrue(dt8.isUtc); | |
| 988 var dt9 = DateTime.parse("-1234-01-01T00:00:00"); | |
| 989 Expect.equals(-1234, dt9.year); | |
| 990 Expect.equals(1, dt9.month); | |
| 991 Expect.equals(1, dt9.day); | |
| 992 Expect.equals(0, dt9.hour); | |
| 993 Expect.equals(0, dt9.minute); | |
| 994 Expect.equals(0, dt9.second); | |
| 995 Expect.equals(0, dt9.millisecond); | |
| 996 Expect.equals(0, dt9.microsecond); | |
| 997 Expect.isFalse(dt9.isUtc); | |
| 998 var dt10 = DateTime.parse("-12340101"); | |
| 999 Expect.equals(-1234, dt10.year); | |
| 1000 Expect.equals(1, dt10.month); | |
| 1001 Expect.equals(1, dt10.day); | |
| 1002 Expect.equals(0, dt10.hour); | |
| 1003 Expect.equals(0, dt10.minute); | |
| 1004 Expect.equals(0, dt10.second); | |
| 1005 Expect.equals(0, dt10.millisecond); | |
| 1006 Expect.equals(0, dt10.microsecond); | |
| 1007 Expect.isFalse(dt10.isUtc); | |
| 1008 dt1 = DateTime.parse("2012-02-27 13:27:00"); | |
| 1009 Expect.equals(2012, dt1.year); | |
| 1010 Expect.equals(2, dt1.month); | |
| 1011 Expect.equals(27, dt1.day); | |
| 1012 Expect.equals(13, dt1.hour); | |
| 1013 Expect.equals(27, dt1.minute); | |
| 1014 Expect.equals(0, dt1.second); | |
| 1015 Expect.equals(0, dt1.millisecond); | |
| 1016 Expect.equals(0, dt1.microsecond); | |
| 1017 Expect.equals(false, dt1.isUtc); | |
| 1018 dt1 = DateTime.parse("2012-02-27 13:27:00.423z"); | |
| 1019 Expect.equals(2012, dt1.year); | |
| 1020 Expect.equals(2, dt1.month); | |
| 1021 Expect.equals(27, dt1.day); | |
| 1022 Expect.equals(13, dt1.hour); | |
| 1023 Expect.equals(27, dt1.minute); | |
| 1024 Expect.equals(0, dt1.second); | |
| 1025 Expect.equals(423, dt1.millisecond); | |
| 1026 Expect.equals(0, dt1.microsecond); | |
| 1027 Expect.equals(true, dt1.isUtc); | |
| 1028 dt1 = DateTime.parse("20120227 13:27:00"); | |
| 1029 Expect.equals(2012, dt1.year); | |
| 1030 Expect.equals(2, dt1.month); | |
| 1031 Expect.equals(27, dt1.day); | |
| 1032 Expect.equals(13, dt1.hour); | |
| 1033 Expect.equals(27, dt1.minute); | |
| 1034 Expect.equals(0, dt1.second); | |
| 1035 Expect.equals(0, dt1.millisecond); | |
| 1036 Expect.equals(0, dt1.microsecond); | |
| 1037 Expect.equals(false, dt1.isUtc); | |
| 1038 dt1 = DateTime.parse("20120227T132700"); | |
| 1039 Expect.equals(2012, dt1.year); | |
| 1040 Expect.equals(2, dt1.month); | |
| 1041 Expect.equals(27, dt1.day); | |
| 1042 Expect.equals(13, dt1.hour); | |
| 1043 Expect.equals(27, dt1.minute); | |
| 1044 Expect.equals(0, dt1.second); | |
| 1045 Expect.equals(0, dt1.millisecond); | |
| 1046 Expect.equals(0, dt1.microsecond); | |
| 1047 Expect.equals(false, dt1.isUtc); | |
| 1048 dt1 = DateTime.parse("20120227"); | |
| 1049 Expect.equals(2012, dt1.year); | |
| 1050 Expect.equals(2, dt1.month); | |
| 1051 Expect.equals(27, dt1.day); | |
| 1052 Expect.equals(0, dt1.hour); | |
| 1053 Expect.equals(0, dt1.minute); | |
| 1054 Expect.equals(0, dt1.second); | |
| 1055 Expect.equals(0, dt1.millisecond); | |
| 1056 Expect.equals(0, dt1.microsecond); | |
| 1057 Expect.equals(false, dt1.isUtc); | |
| 1058 dt1 = DateTime.parse("2012-02-27T14Z"); | |
| 1059 Expect.equals(2012, dt1.year); | |
| 1060 Expect.equals(2, dt1.month); | |
| 1061 Expect.equals(27, dt1.day); | |
| 1062 Expect.equals(14, dt1.hour); | |
| 1063 Expect.equals(0, dt1.minute); | |
| 1064 Expect.equals(0, dt1.second); | |
| 1065 Expect.equals(0, dt1.millisecond); | |
| 1066 Expect.equals(0, dt1.microsecond); | |
| 1067 Expect.equals(true, dt1.isUtc); | |
| 1068 dt1 = DateTime.parse("-123450101 00:00:00 Z"); | |
| 1069 Expect.equals(-12345, dt1.year); | |
| 1070 Expect.equals(1, dt1.month); | |
| 1071 Expect.equals(1, dt1.day); | |
| 1072 Expect.equals(0, dt1.hour); | |
| 1073 Expect.equals(0, dt1.minute); | |
| 1074 Expect.equals(0, dt1.second); | |
| 1075 Expect.equals(0, dt1.millisecond); | |
| 1076 Expect.equals(0, dt1.microsecond); | |
| 1077 Expect.equals(true, dt1.isUtc); | |
| 1078 dt1 = DateTime.parse("1999-01-02 23:59:59.99951"); | |
| 1079 if (supportsMicroseconds) { | |
| 1080 Expect.equals(1999, dt1.year); | |
| 1081 Expect.equals(1, dt1.month); | |
| 1082 Expect.equals(2, dt1.day); | |
| 1083 Expect.equals(23, dt1.hour); | |
| 1084 Expect.equals(59, dt1.minute); | |
| 1085 Expect.equals(59, dt1.second); | |
| 1086 Expect.equals(999, dt1.millisecond); | |
| 1087 Expect.equals(510, dt1.microsecond); | |
| 1088 } else { | |
| 1089 // We only support millisecond. If the user supplies more data (the "51" | |
| 1090 // here), we round. | |
| 1091 Expect.equals(1999, dt1.year); | |
| 1092 Expect.equals(1, dt1.month); | |
| 1093 Expect.equals(3, dt1.day); | |
| 1094 Expect.equals(0, dt1.hour); | |
| 1095 Expect.equals(0, dt1.minute); | |
| 1096 Expect.equals(0, dt1.second); | |
| 1097 Expect.equals(0, dt1.millisecond); | |
| 1098 Expect.equals(0, dt1.microsecond); | |
| 1099 } | |
| 1100 Expect.equals(false, dt1.isUtc); | |
| 1101 dt1 = DateTime.parse("1999-01-02 23:58:59.99951Z"); | |
| 1102 if (supportsMicroseconds) { | |
| 1103 Expect.equals(1999, dt1.year); | |
| 1104 Expect.equals(1, dt1.month); | |
| 1105 Expect.equals(2, dt1.day); | |
| 1106 Expect.equals(23, dt1.hour); | |
| 1107 Expect.equals(58, dt1.minute); | |
| 1108 Expect.equals(59, dt1.second); | |
| 1109 Expect.equals(999, dt1.millisecond); | |
| 1110 Expect.equals(510, dt1.microsecond); | |
| 1111 } else { | |
| 1112 Expect.equals(1999, dt1.year); | |
| 1113 Expect.equals(1, dt1.month); | |
| 1114 Expect.equals(2, dt1.day); | |
| 1115 Expect.equals(23, dt1.hour); | |
| 1116 Expect.equals(59, dt1.minute); | |
| 1117 Expect.equals(0, dt1.second); | |
| 1118 Expect.equals(0, dt1.millisecond); | |
| 1119 Expect.equals(0, dt1.microsecond); | |
| 1120 } | |
| 1121 Expect.equals(true, dt1.isUtc); | |
| 1122 dt1 = DateTime.parse("0009-09-09 09:09:09.009Z"); | |
| 1123 Expect.equals(9, dt1.year); | |
| 1124 Expect.equals(9, dt1.month); | |
| 1125 Expect.equals(9, dt1.day); | |
| 1126 Expect.equals(9, dt1.hour); | |
| 1127 Expect.equals(9, dt1.minute); | |
| 1128 Expect.equals(9, dt1.second); | |
| 1129 Expect.equals(9, dt1.millisecond); | |
| 1130 Expect.equals(true, dt1.isUtc); | |
| 1131 dt1 = DateTime.parse("0009-09-09 09:09:09.009-00"); | |
| 1132 Expect.equals(9, dt1.year); | |
| 1133 Expect.equals(9, dt1.month); | |
| 1134 Expect.equals(9, dt1.day); | |
| 1135 Expect.equals(9, dt1.hour); | |
| 1136 Expect.equals(9, dt1.minute); | |
| 1137 Expect.equals(9, dt1.second); | |
| 1138 Expect.equals(9, dt1.millisecond); | |
| 1139 Expect.equals(true, dt1.isUtc); | |
| 1140 dt1 = DateTime.parse("0009-09-09 09:09:09.009-0000"); | |
| 1141 Expect.equals(9, dt1.year); | |
| 1142 Expect.equals(9, dt1.month); | |
| 1143 Expect.equals(9, dt1.day); | |
| 1144 Expect.equals(9, dt1.hour); | |
| 1145 Expect.equals(9, dt1.minute); | |
| 1146 Expect.equals(9, dt1.second); | |
| 1147 Expect.equals(9, dt1.millisecond); | |
| 1148 Expect.equals(true, dt1.isUtc); | |
| 1149 dt1 = DateTime.parse("0009-09-09 09:09:09.009-02"); | |
| 1150 Expect.equals(9, dt1.year); | |
| 1151 Expect.equals(9, dt1.month); | |
| 1152 Expect.equals(9, dt1.day); | |
| 1153 Expect.equals(11, dt1.hour); | |
| 1154 Expect.equals(9, dt1.minute); | |
| 1155 Expect.equals(9, dt1.second); | |
| 1156 Expect.equals(9, dt1.millisecond); | |
| 1157 Expect.equals(true, dt1.isUtc); | |
| 1158 dt1 = DateTime.parse("0009-09-09 09:09:09.009+0200"); | |
| 1159 Expect.equals(9, dt1.year); | |
| 1160 Expect.equals(9, dt1.month); | |
| 1161 Expect.equals(9, dt1.day); | |
| 1162 Expect.equals(7, dt1.hour); | |
| 1163 Expect.equals(9, dt1.minute); | |
| 1164 Expect.equals(9, dt1.second); | |
| 1165 Expect.equals(9, dt1.millisecond); | |
| 1166 Expect.equals(true, dt1.isUtc); | |
| 1167 dt1 = DateTime.parse("0009-09-09 09:09:09.009+1200"); | |
| 1168 Expect.equals(9, dt1.year); | |
| 1169 Expect.equals(9, dt1.month); | |
| 1170 Expect.equals(8, dt1.day); | |
| 1171 Expect.equals(21, dt1.hour); | |
| 1172 Expect.equals(9, dt1.minute); | |
| 1173 Expect.equals(9, dt1.second); | |
| 1174 Expect.equals(9, dt1.millisecond); | |
| 1175 Expect.equals(true, dt1.isUtc); | |
| 1176 dt1 = DateTime.parse("0009-09-09 09:09:09.009-1200"); | |
| 1177 Expect.equals(9, dt1.year); | |
| 1178 Expect.equals(9, dt1.month); | |
| 1179 Expect.equals(9, dt1.day); | |
| 1180 Expect.equals(21, dt1.hour); | |
| 1181 Expect.equals(9, dt1.minute); | |
| 1182 Expect.equals(9, dt1.second); | |
| 1183 Expect.equals(9, dt1.millisecond); | |
| 1184 Expect.equals(true, dt1.isUtc); | |
| 1185 dt1 = DateTime.parse("0009-09-09 09:09:09.009-0230"); | |
| 1186 Expect.equals(9, dt1.year); | |
| 1187 Expect.equals(9, dt1.month); | |
| 1188 Expect.equals(9, dt1.day); | |
| 1189 Expect.equals(11, dt1.hour); | |
| 1190 Expect.equals(39, dt1.minute); | |
| 1191 Expect.equals(9, dt1.second); | |
| 1192 Expect.equals(9, dt1.millisecond); | |
| 1193 Expect.equals(true, dt1.isUtc); | |
| 1194 dt1 = DateTime.parse("0009-09-09 09:09:09.009-2134"); | |
| 1195 Expect.equals(9, dt1.year); | |
| 1196 Expect.equals(9, dt1.month); | |
| 1197 Expect.equals(10, dt1.day); | |
| 1198 Expect.equals(6, dt1.hour); | |
| 1199 Expect.equals(43, dt1.minute); | |
| 1200 Expect.equals(9, dt1.second); | |
| 1201 Expect.equals(9, dt1.millisecond); | |
| 1202 Expect.equals(true, dt1.isUtc); | |
| 1203 | |
| 1204 Expect.throws(() => DateTime.parse("bad"), (e) => e is FormatException); | |
| 1205 var bad_year = | |
| 1206 1970 + (_MAX_MILLISECONDS ~/ (1000 * 60 * 60 * 24 * 365.2425)) + 1; | |
| 1207 Expect.throws(() => DateTime.parse(bad_year.toString() + "-01-01"), | |
| 1208 (e) => e is FormatException); | |
| 1209 // The last valid time; should not throw. | |
| 1210 dt1 = DateTime.parse("275760-09-13T00:00:00.000Z"); | |
| 1211 Expect.throws(() => DateTime.parse("275760-09-14T00:00:00.000Z"), | |
| 1212 (e) => e is FormatException); | |
| 1213 Expect.throws(() => DateTime.parse("275760-09-13T00:00:00.001Z"), | |
| 1214 (e) => e is FormatException); | |
| 1215 if (supportsMicroseconds) { | |
| 1216 Expect.throws(() => DateTime.parse("275760-09-13T00:00:00.000001Z"), | |
| 1217 (e) => e is FormatException); | |
| 1218 } else { | |
| 1219 dt1 = DateTime.parse("275760-09-13T00:00:00.000001Z"); | |
| 1220 } | |
| 1221 | |
| 1222 // first valid time; should not throw. | |
| 1223 dt1 = DateTime.parse("-271821-04-20T00:00:00.000Z"); | |
| 1224 Expect.throws(() => DateTime.parse("-271821-04-19T23:59:59.999Z"), | |
| 1225 (e) => e is FormatException); | |
| 1226 | |
| 1227 if (supportsMicroseconds) { | |
| 1228 Expect.throws(() => DateTime.parse("-271821-04-19T23:59:59.999999Z"), | |
| 1229 (e) => e is FormatException); | |
| 1230 } | |
| 1231 } | |
| 1232 | |
| 1233 void testWeekday() { | |
| 1234 // 2011-10-06 is Summertime. | |
| 1235 var d = new DateTime(2011, 10, 6, 0, 45, 37, 0); | |
| 1236 Expect.equals(DateTime.THURSDAY, d.weekday); | |
| 1237 d = new DateTime.utc(2011, 10, 6, 0, 45, 37, 0); | |
| 1238 Expect.equals(DateTime.THURSDAY, d.weekday); | |
| 1239 d = new DateTime(2011, 10, 5, 23, 45, 37, 0); | |
| 1240 Expect.equals(DateTime.WEDNESDAY, d.weekday); | |
| 1241 d = new DateTime.utc(2011, 10, 5, 23, 45, 37, 0); | |
| 1242 Expect.equals(DateTime.WEDNESDAY, d.weekday); | |
| 1243 // 1970-01-01 is Wintertime. | |
| 1244 d = new DateTime(1970, 1, 1, 0, 0, 0, 1); | |
| 1245 Expect.equals(DateTime.THURSDAY, d.weekday); | |
| 1246 d = new DateTime.utc(1970, 1, 1, 0, 0, 0, 1); | |
| 1247 Expect.equals(DateTime.THURSDAY, d.weekday); | |
| 1248 d = new DateTime.utc(1969, 12, 31, 23, 59, 59, 999); | |
| 1249 Expect.equals(DateTime.WEDNESDAY, d.weekday); | |
| 1250 d = new DateTime(1969, 12, 31, 23, 59, 59, 999); | |
| 1251 Expect.equals(DateTime.WEDNESDAY, d.weekday); | |
| 1252 d = new DateTime(2011, 10, 4, 23, 45, 37, 0); | |
| 1253 Expect.equals(DateTime.TUESDAY, d.weekday); | |
| 1254 d = new DateTime(2011, 10, 3, 23, 45, 37, 0); | |
| 1255 Expect.equals(DateTime.MONDAY, d.weekday); | |
| 1256 d = new DateTime(2011, 10, 2, 23, 45, 37, 0); | |
| 1257 Expect.equals(DateTime.SUNDAY, d.weekday); | |
| 1258 d = new DateTime(2011, 10, 1, 23, 45, 37, 0); | |
| 1259 Expect.equals(DateTime.SATURDAY, d.weekday); | |
| 1260 d = new DateTime(2011, 9, 30, 23, 45, 37, 0); | |
| 1261 Expect.equals(DateTime.FRIDAY, d.weekday); | |
| 1262 } | |
| 1263 | |
| 1264 void testToStrings() { | |
| 1265 void test(date, time) { | |
| 1266 { | |
| 1267 // UTC time. | |
| 1268 String source1 = "$date ${time}Z"; | |
| 1269 String source2 = "${date}T${time}Z"; | |
| 1270 var utcTime1 = DateTime.parse(source1); | |
| 1271 var utcTime2 = DateTime.parse(source1); | |
| 1272 Expect.isTrue(utcTime1.isUtc); | |
| 1273 Expect.equals(utcTime1, utcTime2); | |
| 1274 Expect.equals(source1, utcTime1.toString()); | |
| 1275 Expect.equals(source2, utcTime1.toIso8601String()); | |
| 1276 } | |
| 1277 { | |
| 1278 // Local time | |
| 1279 String source1 = "$date $time"; | |
| 1280 String source2 = "${date}T$time"; | |
| 1281 var utcTime1 = DateTime.parse(source1); | |
| 1282 var utcTime2 = DateTime.parse(source1); | |
| 1283 Expect.isFalse(utcTime1.isUtc); | |
| 1284 Expect.equals(utcTime1, utcTime2); | |
| 1285 Expect.equals(source1, utcTime1.toString()); | |
| 1286 Expect.equals(source2, utcTime1.toIso8601String()); | |
| 1287 } | |
| 1288 } | |
| 1289 | |
| 1290 test("2000-01-01", "12:00:00.000"); | |
| 1291 test("-2000-01-01", "12:00:00.000"); | |
| 1292 test("1970-01-01", "00:00:00.000"); | |
| 1293 test("1969-12-31", "23:59:59.999"); | |
| 1294 test("1969-09-09", "00:09:09.009"); | |
| 1295 | |
| 1296 if (supportsMicroseconds) { | |
| 1297 test("2000-01-01", "12:00:00.000001"); | |
| 1298 test("-2000-01-01", "12:00:00.000001"); | |
| 1299 test("1970-01-01", "00:00:00.000001"); | |
| 1300 test("1969-12-31", "23:59:59.999999"); | |
| 1301 test("1969-09-09", "00:09:09.009999"); | |
| 1302 } | |
| 1303 } | |
| 1304 | |
| 1305 void testIsoString() { | |
| 1306 var d = new DateTime(9999, 1, 1, 23, 59, 59, 999); | |
| 1307 Expect.equals("9999-01-01T23:59:59.999", d.toIso8601String()); | |
| 1308 d = new DateTime(-9999, 1, 1, 23, 59, 59, 999); | |
| 1309 Expect.equals("-9999-01-01T23:59:59.999", d.toIso8601String()); | |
| 1310 d = new DateTime.utc(9999, 1, 1, 23, 59, 59, 999); | |
| 1311 Expect.equals("9999-01-01T23:59:59.999Z", d.toIso8601String()); | |
| 1312 d = new DateTime.utc(-9999, 1, 1, 23, 59, 59, 999); | |
| 1313 Expect.equals("-9999-01-01T23:59:59.999Z", d.toIso8601String()); | |
| 1314 | |
| 1315 d = new DateTime(10000, 1, 1, 23, 59, 59, 999); | |
| 1316 Expect.equals("+010000-01-01T23:59:59.999", d.toIso8601String()); | |
| 1317 d = new DateTime(-10000, 1, 1, 23, 59, 59, 999); | |
| 1318 Expect.equals("-010000-01-01T23:59:59.999", d.toIso8601String()); | |
| 1319 d = new DateTime.utc(10000, 1, 1, 23, 59, 59, 999); | |
| 1320 Expect.equals("+010000-01-01T23:59:59.999Z", d.toIso8601String()); | |
| 1321 d = new DateTime.utc(-10000, 1, 1, 23, 59, 59, 999); | |
| 1322 Expect.equals("-010000-01-01T23:59:59.999Z", d.toIso8601String()); | |
| 1323 | |
| 1324 if (!supportsMicroseconds) return; | |
| 1325 | |
| 1326 d = new DateTime(9999, 1, 1, 23, 59, 59, 999, 999); | |
| 1327 Expect.equals("9999-01-01T23:59:59.999999", d.toIso8601String()); | |
| 1328 d = new DateTime(-9999, 1, 1, 23, 59, 59, 999, 999); | |
| 1329 Expect.equals("-9999-01-01T23:59:59.999999", d.toIso8601String()); | |
| 1330 d = new DateTime.utc(9999, 1, 1, 23, 59, 59, 999, 999); | |
| 1331 Expect.equals("9999-01-01T23:59:59.999999Z", d.toIso8601String()); | |
| 1332 d = new DateTime.utc(-9999, 1, 1, 23, 59, 59, 999, 999); | |
| 1333 Expect.equals("-9999-01-01T23:59:59.999999Z", d.toIso8601String()); | |
| 1334 | |
| 1335 d = new DateTime(10000, 1, 1, 23, 59, 59, 999, 999); | |
| 1336 Expect.equals("+010000-01-01T23:59:59.999999", d.toIso8601String()); | |
| 1337 d = new DateTime(-10000, 1, 1, 23, 59, 59, 999, 999); | |
| 1338 Expect.equals("-010000-01-01T23:59:59.999999", d.toIso8601String()); | |
| 1339 d = new DateTime.utc(10000, 1, 1, 23, 59, 59, 999, 999); | |
| 1340 Expect.equals("+010000-01-01T23:59:59.999999Z", d.toIso8601String()); | |
| 1341 d = new DateTime.utc(-10000, 1, 1, 23, 59, 59, 999, 999); | |
| 1342 Expect.equals("-010000-01-01T23:59:59.999999Z", d.toIso8601String()); | |
| 1343 | |
| 1344 d = new DateTime(9999, 1, 1, 23, 49, 59, 989, 979); | |
| 1345 Expect.equals("9999-01-01T23:49:59.989979", d.toIso8601String()); | |
| 1346 d = new DateTime(-9999, 1, 1, 23, 49, 59, 989, 979); | |
| 1347 Expect.equals("-9999-01-01T23:49:59.989979", d.toIso8601String()); | |
| 1348 d = new DateTime.utc(9999, 1, 1, 23, 49, 59, 989, 979); | |
| 1349 Expect.equals("9999-01-01T23:49:59.989979Z", d.toIso8601String()); | |
| 1350 d = new DateTime.utc(-9999, 1, 1, 23, 49, 59, 989, 979); | |
| 1351 Expect.equals("-9999-01-01T23:49:59.989979Z", d.toIso8601String()); | |
| 1352 | |
| 1353 d = new DateTime(10000, 1, 1, 23, 49, 59, 989, 979); | |
| 1354 Expect.equals("+010000-01-01T23:49:59.989979", d.toIso8601String()); | |
| 1355 d = new DateTime(-10000, 1, 1, 23, 49, 59, 989, 979); | |
| 1356 Expect.equals("-010000-01-01T23:49:59.989979", d.toIso8601String()); | |
| 1357 d = new DateTime.utc(10000, 1, 1, 23, 49, 59, 989, 979); | |
| 1358 Expect.equals("+010000-01-01T23:49:59.989979Z", d.toIso8601String()); | |
| 1359 d = new DateTime.utc(-10000, 1, 1, 23, 49, 59, 989, 979); | |
| 1360 Expect.equals("-010000-01-01T23:49:59.989979Z", d.toIso8601String()); | |
| 1361 } | |
| 1362 | |
| 1363 void main() { | |
| 1364 testNow(); | |
| 1365 testMillisecondsSinceEpoch(); | |
| 1366 testMicrosecondsSinceEpoch(); | |
| 1367 testConstructors(); | |
| 1368 testUTCGetters(); | |
| 1369 testLocalGetters(); | |
| 1370 testChangeTimeZone(); | |
| 1371 testSubAdd(); | |
| 1372 testUnderflowAndOverflow(); | |
| 1373 testDateStrings(); | |
| 1374 testEquivalentYears(); | |
| 1375 testExtremes(); | |
| 1376 testFarAwayDates(); | |
| 1377 testWeekday(); | |
| 1378 testToStrings(); | |
| 1379 testIsoString(); | |
| 1380 } | |
| OLD | NEW |