2 // DateTimeTest.cs - NUnit Test Cases for the System.DateTime struct
5 // Martin Baulig (martin@gnome.org)
7 // (C) 2002 Free Software Foundation
8 // Copyright (C) 2004 Novell (http://www.novell.com)
11 using NUnit
.Framework
;
14 using System
.Threading
;
15 using System
.Globalization
;
17 namespace MonoTests
.System
21 public class DateTimeTest
: Assertion
24 internal enum Resolution
: ushort {
40 internal void DTAssertEquals (DateTime actual
, DateTime expected
, Resolution resolution
) {
41 DTAssertEquals ("", actual
, expected
, resolution
);
44 internal void DTAssertEquals (string message
, DateTime expected
, DateTime actual
, Resolution resolution
) {
45 if ((resolution
& Resolution
.Year
) != 0)
46 AssertEquals (message
, expected
.Year
, actual
.Year
);
47 if ((resolution
& Resolution
._Month
) != 0)
48 AssertEquals (message
, expected
.Month
, actual
.Month
);
49 if ((resolution
& Resolution
._Day
) != 0)
50 AssertEquals (message
, expected
.Day
, actual
.Day
);
51 if ((resolution
& Resolution
._Hour
) != 0)
52 AssertEquals (message
, expected
.Hour
, actual
.Hour
);
53 if ((resolution
& Resolution
._Minute
) != 0)
54 AssertEquals (message
, expected
.Minute
, actual
.Minute
);
55 if ((resolution
& Resolution
._Second
) != 0)
56 AssertEquals (message
, expected
.Second
, actual
.Second
);
57 if ((resolution
& Resolution
._Millisecond
) != 0)
58 AssertEquals (message
, expected
.Millisecond
, actual
.Millisecond
);
61 private CultureInfo oldcult
;
64 631501920000000000L, // 25 Feb 2002 - 00:00:00
65 631502475130080000L, // 25 Feb 2002 - 15:25:13,8
66 631502115130080000L, // 25 Feb 2002 - 05:25:13,8
67 631502115000000000L, // 25 Feb 2002 - 05:25:00
68 631502115130000000L, // 25 Feb 2002 - 05:25:13
69 631502079130000000L, // 25 Feb 2002 - 04:25:13
70 629197085770000000L // 06 Nov 1994 - 08:49:37
73 public DateTimeTest() {}
78 // the current culture determines the result of formatting
79 oldcult
= Thread
.CurrentThread
.CurrentCulture
;
80 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("");
84 public void TearDown ()
86 Thread
.CurrentThread
.CurrentCulture
= oldcult
;
89 public void TestCtors ()
91 DateTime t1
= new DateTime (2002,2,25);
92 AssertEquals("A01", myTicks
[0], t1
.Ticks
);
93 DateTime t2
= new DateTime (2002,2,25,15,25,13,8);
94 AssertEquals("A02", myTicks
[1], t2
.Ticks
);
95 AssertEquals("A03", myTicks
[0], t2
.Date
.Ticks
);
96 AssertEquals("A04", 2002, t2
.Year
);
97 AssertEquals("A05", 2, t2
.Month
);
98 AssertEquals("A06", 25, t2
.Day
);
99 AssertEquals("A07", 15, t2
.Hour
);
100 AssertEquals("A08", 25, t2
.Minute
);
101 AssertEquals("A09", 13, t2
.Second
);
102 AssertEquals("A10", 8, t2
.Millisecond
);
103 DateTime t3
= new DateTime (2002,2,25,5,25,13,8);
104 AssertEquals("A11", myTicks
[2], t3
.Ticks
);
108 public void Constructor_Max ()
110 AssertEquals ("Max", 3155378975999990000, new DateTime (9999, 12, 31, 23, 59, 59, 999).Ticks
);
114 [ExpectedException (typeof (ArgumentOutOfRangeException
))]
115 public void Constructor_Milliseconds_Negative ()
117 new DateTime (9999, 12, 31, 23, 59, 59, -1);
121 [ExpectedException (typeof (ArgumentOutOfRangeException
))]
122 public void Constructor_Milliseconds_1000 ()
124 new DateTime (9999, 12, 31, 23, 59, 59, 1000);
128 public void Fields ()
130 AssertEquals ("J01", 3155378975999999999L, DateTime
.MaxValue
.Ticks
);
131 AssertEquals ("J02", 0, DateTime
.MinValue
.Ticks
);
137 DateTime t1
= new DateTime (myTicks
[1]);
138 TimeSpan span
= new TimeSpan (3, 54, 1);
139 DateTime t2
= t1
.Add (span
);
141 AssertEquals ("K01", 25, t2
.Day
);
142 AssertEquals ("K02", 19, t2
.Hour
);
143 AssertEquals ("K03", 19, t2
.Minute
);
144 AssertEquals ("K04", 14, t2
.Second
);
146 AssertEquals ("K05", 25, t1
.Day
);
147 AssertEquals ("K06", 15, t1
.Hour
);
148 AssertEquals ("K07", 25, t1
.Minute
);
149 AssertEquals ("K08", 13, t1
.Second
);
153 [ExpectedException(typeof (ArgumentOutOfRangeException
))]
154 public void AddOutOfRangeException1 ()
156 DateTime t1
= new DateTime (myTicks
[1]);
157 t1
.Add (TimeSpan
.MaxValue
);
161 [ExpectedException(typeof (ArgumentOutOfRangeException
))]
162 public void AddOutOfRangeException2 ()
164 DateTime t1
= new DateTime (myTicks
[1]);
165 t1
.Add (TimeSpan
.MinValue
);
169 public void AddDays ()
171 DateTime t1
= new DateTime (myTicks
[1]);
173 AssertEquals ("L01", 28, t1
.Day
);
174 AssertEquals ("L02", 15, t1
.Hour
);
175 AssertEquals ("L03", 25, t1
.Minute
);
176 AssertEquals ("L04", 13, t1
.Second
);
178 t1
= t1
.AddDays (1.9);
179 AssertEquals ("L05", 2, t1
.Day
);
180 AssertEquals ("L06", 13, t1
.Hour
);
181 AssertEquals ("L07", 1, t1
.Minute
);
182 AssertEquals ("L08", 13, t1
.Second
);
184 t1
= t1
.AddDays (0.2);
185 AssertEquals ("L09", 2, t1
.Day
);
186 AssertEquals ("L10", 17, t1
.Hour
);
187 AssertEquals ("L11", 49, t1
.Minute
);
188 AssertEquals ("L12", 13, t1
.Second
);
192 [ExpectedException(typeof (ArgumentOutOfRangeException
))]
193 public void AddDaysOutOfRangeException1 ()
195 DateTime t1
= new DateTime (myTicks
[1]);
196 t1
.AddDays (10000000);
200 [ExpectedException(typeof (ArgumentOutOfRangeException
))]
201 public void AddDaysOutOfRangeException2 ()
203 DateTime t1
= new DateTime (myTicks
[1]);
204 t1
.AddDays (-10000000);
208 public void AddHours ()
210 DateTime t1
= new DateTime (myTicks
[1]);
211 t1
= t1
.AddHours (10);
212 AssertEquals ("N01", 26, t1
.Day
);
213 AssertEquals ("N02", 1, t1
.Hour
);
214 AssertEquals ("N03", 25, t1
.Minute
);
215 AssertEquals ("N04", 13, t1
.Second
);
217 t1
= t1
.AddHours (-3.7);
218 AssertEquals ("N05", 25, t1
.Day
);
219 AssertEquals ("N06", 21, t1
.Hour
);
220 AssertEquals ("N07", 43, t1
.Minute
);
221 AssertEquals ("N08", 13, t1
.Second
);
223 t1
= t1
.AddHours (3.732);
224 AssertEquals ("N09", 26, t1
.Day
);
225 AssertEquals ("N10", 1, t1
.Hour
);
226 AssertEquals ("N11", 27, t1
.Minute
);
227 AssertEquals ("N12", 8, t1
.Second
);
231 [ExpectedException (typeof (ArgumentOutOfRangeException
))]
232 public void AddHoursOutOfRangeException1 ()
234 DateTime t1
= new DateTime (myTicks
[1]);
239 [ExpectedException (typeof (ArgumentOutOfRangeException
))]
240 public void AddHoursOutOfRangeException2 ()
242 DateTime t1
= new DateTime (myTicks
[1]);
243 t1
.AddHours (-9E100
);
247 public void AddMilliseconds ()
249 DateTime t1
= new DateTime (myTicks
[1]);
250 t1
= t1
.AddMilliseconds (1E10
);
251 AssertEquals ("O01", 21, t1
.Day
);
252 AssertEquals ("O02", 9, t1
.Hour
);
253 AssertEquals ("O03", 11, t1
.Minute
);
254 AssertEquals ("O04", 53, t1
.Second
);
256 t1
= t1
.AddMilliseconds (-19E10
);
257 AssertEquals ("O05", 13, t1
.Day
);
258 AssertEquals ("O06", 7, t1
.Hour
);
259 AssertEquals ("O07", 25, t1
.Minute
);
260 AssertEquals ("O08", 13, t1
.Second
);
262 t1
= t1
.AddMilliseconds (15.623);
263 AssertEquals ("O09", 13, t1
.Day
);
264 AssertEquals ("O10", 7, t1
.Hour
);
265 AssertEquals ("O11", 25, t1
.Minute
);
266 AssertEquals ("O12", 13, t1
.Second
);
270 [ExpectedException (typeof (ArgumentOutOfRangeException
))]
271 public void AddMillisecondsOutOfRangeException1 ()
273 DateTime t1
= new DateTime (myTicks
[1]);
274 t1
.AddMilliseconds (9E100
);
278 [ExpectedException (typeof (ArgumentOutOfRangeException
))]
279 public void AddMillisecondsOutOfRangeException2 ()
281 DateTime t1
= new DateTime (myTicks
[1]);
282 t1
.AddMilliseconds (-9E100
);
286 public void TestToString ()
288 DateTime t1
= new DateTime (myTicks
[2]);
289 DateTime t2
= new DateTime (myTicks
[1]);
291 AssertEquals("B01", "02/25/2002", t1
.ToString ("d"));
292 AssertEquals("B02", "Monday, 25 February 2002", t1
.ToString ("D"));
293 AssertEquals("B03", "Monday, 25 February 2002 05:25", t1
.ToString ("f"));
294 AssertEquals("B04", "Monday, 25 February 2002 05:25:13", t1
.ToString ("F"));
295 AssertEquals("B05", "02/25/2002 05:25", t1
.ToString ("g"));
296 AssertEquals("B06", "02/25/2002 05:25:13", t1
.ToString ("G"));
297 AssertEquals("B07", "February 25", t1
.ToString ("m"));
298 AssertEquals("B08", "February 25", t1
.ToString ("M"));
299 AssertEquals("B09", "Mon, 25 Feb 2002 05:25:13 GMT", t1
.ToString ("r"));
300 AssertEquals("B10", "Mon, 25 Feb 2002 05:25:13 GMT", t1
.ToString ("R"));
301 AssertEquals("B11", "2002-02-25T05:25:13", t1
.ToString ("s"));
302 AssertEquals("B12", "05:25", t1
.ToString ("t"));
303 AssertEquals("B13", "05:25:13", t1
.ToString ("T"));
304 //AssertEquals("B14", "2002-02-25 05:25:13Z", t1.ToString ("u"));
305 //AssertEquals("B15", "Sunday, 24 February 2002 11:25:13", t1.ToString ("U"));
306 AssertEquals("B16", "2002 February", t1
.ToString ("y"));
307 AssertEquals("B17", "2002 February", t1
.ToString ("Y"));
310 AssertEquals("C01", "25", t1
.ToString ("%d"));
311 AssertEquals("C02", "25", t1
.ToString ("dd"));
312 AssertEquals("C03", "Mon", t1
.ToString ("ddd"));
313 AssertEquals("C04", "Monday", t1
.ToString ("dddd"));
314 AssertEquals("C05", "2", t1
.ToString ("%M"));
315 AssertEquals("C06", "02", t1
.ToString ("MM"));
316 AssertEquals("C07", "Feb", t1
.ToString ("MMM"));
317 AssertEquals("C08", "February", t1
.ToString ("MMMM"));
318 AssertEquals("C09", "2", t1
.ToString ("%y"));
319 AssertEquals("C10", "02", t1
.ToString ("yy"));
320 AssertEquals("C11", "2002", t1
.ToString ("yyyy"));
321 AssertEquals("C12", "5", t1
.ToString ("%h"));
322 AssertEquals("C13", "05", t1
.ToString ("hh"));
323 AssertEquals("C14", "3", t2
.ToString ("%h"));
324 AssertEquals("C15", "03", t2
.ToString ("hh"));
325 AssertEquals("C16", "15", t2
.ToString ("%H"));
326 AssertEquals("C17", "15", t2
.ToString ("HH"));
327 AssertEquals("C18", "25", t2
.ToString ("%m"));
328 AssertEquals("C19", "25", t2
.ToString ("mm"));
329 AssertEquals("C20", "13", t2
.ToString ("%s"));
330 AssertEquals("C21", "13", t2
.ToString ("ss"));
331 AssertEquals("C22", "A", t1
.ToString ("%t"));
332 AssertEquals("C23", "P", t2
.ToString ("%t"));
333 AssertEquals("C24", "AM", t1
.ToString ("tt"));
334 AssertEquals("C25", "PM", t2
.ToString ("tt"));
335 long offset
= TimeZone
.CurrentTimeZone
.GetUtcOffset(t1
).Ticks
/ 36000000000;
336 AssertEquals("C26", offset
.ToString("+#;-#;0"), t1
.ToString ("%z"));
337 AssertEquals("C27", offset
.ToString("+00;-00;00"), t1
.ToString ("zz"));
338 // This does not work in, eg banglore, because their timezone has an offset of
340 //AssertEquals("C28", offset.ToString("+00;-00;00") + ":00", t1.ToString ("zzz"));
341 AssertEquals("C29", " : ", t1
.ToString (" : "));
342 AssertEquals("C30", " / ", t1
.ToString (" / "));
343 AssertEquals("C31", " yyy ", t1
.ToString (" 'yyy' "));
344 AssertEquals("C32", " d", t1
.ToString (" \\d"));
347 [Ignore ("need a better way to handle these tests with them running on different timezones")]
348 public void TestParseExact2 ()
350 DateTime t1
= DateTime
.ParseExact ("2002-02-25 04:25:13Z", "u", null);
351 t1
= TimeZone
.CurrentTimeZone
.ToUniversalTime(t1
);
352 AssertEquals ("D07d", 04 + TimeZone
.CurrentTimeZone
.GetUtcOffset(t1
).Hours
, t1
.Hour
);
356 public void TestParseExact ()
359 DateTime t1
= DateTime
.ParseExact ("02/25/2002", "d", null);
360 AssertEquals ("D01", myTicks
[0], t1
.Ticks
);
361 t1
= DateTime
.ParseExact ("Monday, 25 February 2002", "D", null);
362 AssertEquals ("D02", myTicks
[0], t1
.Ticks
);
363 t1
= DateTime
.ParseExact ("Monday, 25 February 2002 05:25", "f", null);
364 AssertEquals ("D03", myTicks
[3], t1
.Ticks
);
365 t1
= DateTime
.ParseExact ("Monday, 25 February 2002 05:25:13", "F", null);
366 AssertEquals ("D04", myTicks
[4], t1
.Ticks
);
367 t1
= DateTime
.ParseExact ("02/25/2002 05:25", "g", null);
368 AssertEquals ("D05", myTicks
[3], t1
.Ticks
);
369 t1
= DateTime
.ParseExact ("02/25/2002 05:25:13", "G", null);
370 AssertEquals ("D06", myTicks
[4], t1
.Ticks
);
371 t1
= DateTime
.ParseExact ("2002-02-25 04:25:13Z", "u", null);
372 AssertEquals ("D07a", 2002, t1
.Year
);
373 AssertEquals ("D07b", 02, t1
.Month
);
374 AssertEquals ("D07c", 25, t1
.Day
);
375 AssertEquals ("D07e", 25, t1
.Minute
);
376 AssertEquals ("D07f", 13, t1
.Second
);
377 t1
= DateTime
.ParseExact ("Monday, 25 February 2002 04:25:13", "U", null);
378 t1
= TimeZone
.CurrentTimeZone
.ToUniversalTime(t1
);
379 AssertEquals ("D08a", 2002, t1
.Year
);
380 AssertEquals ("D08b", 02, t1
.Month
);
381 AssertEquals ("D08c", 25, t1
.Day
);
382 AssertEquals ("D08d", 04, t1
.Hour
);
383 AssertEquals ("D08e", 25, t1
.Minute
);
384 AssertEquals ("D08f", 13, t1
.Second
);
386 DateTime t2
= new DateTime (DateTime
.Today
.Year
, 2, 25);
387 t1
= DateTime
.ParseExact ("February 25", "m", null);
388 AssertEquals ("D09", t2
.Ticks
, t1
.Ticks
);
390 t2
= new DateTime (DateTime
.Today
.Year
, 2, 25);
391 t1
= DateTime
.ParseExact ("February 25", "M", null);
392 AssertEquals ("D10", t2
.Ticks
, t1
.Ticks
);
394 t1
= DateTime
.ParseExact ("Mon, 25 Feb 2002 04:25:13 GMT", "r", null);
395 AssertEquals ("D11a", 2002, t1
.Year
);
396 AssertEquals ("D11b", 02, t1
.Month
);
397 AssertEquals ("D11c", 25, t1
.Day
);
398 AssertEquals ("D11d", 04, t1
.Hour
);
399 AssertEquals ("D11e", 25, t1
.Minute
);
400 AssertEquals ("D11f", 13, t1
.Second
);
402 t1
= DateTime
.ParseExact ("Mon, 25 Feb 2002 04:25:13 GMT", "R", null);
403 AssertEquals ("D12a", 2002, t1
.Year
);
404 AssertEquals ("D12b", 02, t1
.Month
);
405 AssertEquals ("D12c", 25, t1
.Day
);
406 AssertEquals ("D12d", 04, t1
.Hour
);
407 AssertEquals ("D12e", 25, t1
.Minute
);
408 AssertEquals ("D12f", 13, t1
.Second
);
410 t1
= DateTime
.ParseExact ("2002-02-25T05:25:13", "s", null);
411 AssertEquals ("D13", myTicks
[4], t1
.Ticks
);
413 t2
= DateTime
.Today
+ new TimeSpan (5,25,0);
414 t1
= DateTime
.ParseExact ("05:25", "t", null);
415 AssertEquals("D14", t2
.Ticks
, t1
.Ticks
);
417 t2
= DateTime
.Today
+ new TimeSpan (5,25,13);
418 t1
= DateTime
.ParseExact ("05:25:13", "T", null);
419 AssertEquals("D15", t2
.Ticks
, t1
.Ticks
);
421 t2
= new DateTime (2002, 2, 1);
422 t1
= DateTime
.ParseExact ("2002 February", "y", null);
423 AssertEquals ("D16", t2
.Ticks
, t1
.Ticks
);
425 t2
= new DateTime (2002, 2, 1);
426 t1
= DateTime
.ParseExact ("2002 February", "Y", null);
427 AssertEquals ("D16", t2
.Ticks
, t1
.Ticks
);
430 t2
= new DateTime (DateTime
.Now
.Year
, 1, 25);
431 t1
= DateTime
.ParseExact ("25", "%d", null);
432 AssertEquals ("E01: " + t2
+ " -- " + t1
, t2
.Ticks
, t1
.Ticks
);
433 t1
= DateTime
.ParseExact ("25", "dd", null);
434 AssertEquals ("E02", t2
.Ticks
, t1
.Ticks
);
436 t2
= new DateTime (DateTime
.Today
.Year
, 2, 1);
437 t1
= DateTime
.ParseExact ("2", "%M", null);
438 AssertEquals ("E03", t2
.Ticks
, t1
.Ticks
);
439 t1
= DateTime
.ParseExact ("02", "MM", null);
440 AssertEquals ("E04", t2
.Ticks
, t1
.Ticks
);
441 t1
= DateTime
.ParseExact ("Feb", "MMM", null);
442 AssertEquals ("E05", t2
.Ticks
, t1
.Ticks
);
443 t1
= DateTime
.ParseExact ("February", "MMMM", null);
444 AssertEquals ("E06", t2
.Ticks
, t1
.Ticks
);
446 t2
= new DateTime (2005, 1, 1);
447 t1
= DateTime
.ParseExact ("5", "%y", null);
448 AssertEquals ("E07", t2
.Ticks
, t1
.Ticks
);
449 t1
= DateTime
.ParseExact ("05", "yy", null);
450 AssertEquals ("E08", t2
.Ticks
, t1
.Ticks
);
451 t1
= DateTime
.ParseExact ("2005", "yyyy", null);
452 AssertEquals ("E09", t2
.Ticks
, t1
.Ticks
);
454 t2
= DateTime
.Today
+ new TimeSpan (5, 0, 0);
455 t1
= DateTime
.ParseExact ("5A", "ht", null);
456 AssertEquals ("E10", t2
.Ticks
, t1
.Ticks
);
457 t1
= DateTime
.ParseExact ("05A", "hht", null);
458 AssertEquals ("E11", t2
.Ticks
, t1
.Ticks
);
460 t2
= DateTime
.Today
+ new TimeSpan (15, 0, 0);
461 t1
= DateTime
.ParseExact ("3P", "ht", null);
462 AssertEquals ("E12", t2
.Ticks
, t1
.Ticks
);
463 t1
= DateTime
.ParseExact ("03P", "hht", null);
464 AssertEquals ("E13", t2
.Ticks
, t1
.Ticks
);
466 t2
= DateTime
.Today
+ new TimeSpan (5, 0, 0);
467 t1
= DateTime
.ParseExact ("5", "%H", null);
468 AssertEquals ("E14", t2
.Ticks
, t1
.Ticks
);
470 t2
= DateTime
.Today
+ new TimeSpan (15, 0, 0);
471 t1
= DateTime
.ParseExact ("15", "%H", null);
472 AssertEquals ("E15", t2
.Ticks
, t1
.Ticks
);
473 t1
= DateTime
.ParseExact ("15", "HH", null);
474 AssertEquals ("E16", t2
.Ticks
, t1
.Ticks
);
477 t2
= DateTime
.Today
+ new TimeSpan (17, 18, 0);
478 t1
= DateTime
.ParseExact ("11:18AM -5", "h:mmtt z", null);
479 t1
= TimeZone
.CurrentTimeZone
.ToUniversalTime(t1
);
480 if (!TimeZone
.CurrentTimeZone
.IsDaylightSavingTime(t1
))
481 t1
+= new TimeSpan(1, 0, 0);
482 AssertEquals ("F01", t2
.Ticks
, t1
.Ticks
);
484 t1
= DateTime
.ParseExact ("11:18AM -05:00", "h:mmtt zzz", null);
485 t1
= TimeZone
.CurrentTimeZone
.ToUniversalTime(t1
);
486 if (!TimeZone
.CurrentTimeZone
.IsDaylightSavingTime(t1
))
487 t1
+= new TimeSpan(1, 0, 0);
488 AssertEquals ("F02", t2
.Ticks
, t1
.Ticks
);
490 t1
= DateTime
.ParseExact ("7:18PM +03", "h:mmtt zz", null);
491 t1
= TimeZone
.CurrentTimeZone
.ToUniversalTime(t1
);
492 if (!TimeZone
.CurrentTimeZone
.IsDaylightSavingTime(t1
))
493 t1
+= new TimeSpan(1, 0, 0);
494 AssertEquals ("F03", t2
.Ticks
, t1
.Ticks
);
496 t1
= DateTime
.ParseExact ("7:48PM +03:30", "h:mmtt zzz", null);
497 t1
= TimeZone
.CurrentTimeZone
.ToUniversalTime(t1
);
498 if (!TimeZone
.CurrentTimeZone
.IsDaylightSavingTime(t1
))
499 t1
+= new TimeSpan(1, 0, 0);
500 AssertEquals ("F04", t2
.Ticks
, t1
.Ticks
);
503 t2
= DateTime
.Today
+ new TimeSpan (16, 18, 0);
504 t1
= DateTime
.ParseExact ("11:18AM -5", "h:mmtt z",
505 null, DateTimeStyles
.AdjustToUniversal
);
506 AssertEquals ("G01", t2
.Ticks
, t1
.Ticks
);
508 t1
= DateTime
.ParseExact ("Monday, 25 February 2002 05:25:13", "F",
509 null, DateTimeStyles
.AdjustToUniversal
);
510 AssertEquals ("G02", myTicks
[4], t1
.Ticks
);
511 t1
= DateTime
.ParseExact ("Monday, 25 February 2002 05:25:13",
512 "dddd, dd MMMM yyyy HH:mm:ss",
513 null, DateTimeStyles
.AdjustToUniversal
);
514 AssertEquals ("G03", myTicks
[4], t1
.Ticks
);
516 t1
= DateTime
.ParseExact ("02/25/2002", "d", null,
517 DateTimeStyles
.AllowWhiteSpaces
);
518 AssertEquals ("G04", myTicks
[0], t1
.Ticks
);
520 t1
= DateTime
.ParseExact (" 02/25/2002", "d", null,
521 DateTimeStyles
.AllowLeadingWhite
);
522 AssertEquals ("G05", myTicks
[0], t1
.Ticks
);
524 t1
= DateTime
.ParseExact ("02/25/2002 ", "d", null,
525 DateTimeStyles
.AllowTrailingWhite
);
526 AssertEquals ("G06", myTicks
[0], t1
.Ticks
);
528 t1
= DateTime
.ParseExact (" 02 / 25 / 2002 ", "d", null,
529 DateTimeStyles
.AllowWhiteSpaces
);
530 AssertEquals ("G07", myTicks
[0], t1
.Ticks
);
532 // Multi Custom Patterns
533 string rfc1123_date
= "r";
534 string rfc850_date
= "dddd, dd'-'MMM'-'yy HH':'mm':'ss 'GMT'";
535 string asctime_date
= "ddd MMM d HH':'mm':'ss yyyy";
536 string [] formats
= new string [] {rfc1123_date, rfc850_date, asctime_date}
;
537 CultureInfo enUS
= new CultureInfo("en-US", false);
538 t1
= DateTime
.ParseExact ("Sun, 06 Nov 1994 08:49:37 GMT", formats
[0], enUS
,
539 DateTimeStyles
.AllowWhiteSpaces
);
540 AssertEquals ("M01", myTicks
[6], t1
.Ticks
);
541 t1
= DateTime
.ParseExact ("Sunday, 06-Nov-94 08:49:37 GMT", formats
[1], enUS
,
542 DateTimeStyles
.AllowWhiteSpaces
);
543 AssertEquals ("M02", myTicks
[6], t1
.Ticks
);
544 t1
= DateTime
.ParseExact ("Sun Nov 6 08:49:37 1994", formats
[2], enUS
,
545 DateTimeStyles
.AllowWhiteSpaces
);
546 AssertEquals ("M03", myTicks
[6], t1
.Ticks
);
547 t1
= DateTime
.ParseExact ("Sun, 06 Nov 1994 08:49:37 GMT", formats
, enUS
,
548 DateTimeStyles
.AllowWhiteSpaces
);
549 AssertEquals ("M04", myTicks
[6], t1
.Ticks
);
550 t1
= DateTime
.ParseExact ("Sunday, 06-Nov-94 08:49:37 GMT", formats
, enUS
,
551 DateTimeStyles
.AllowWhiteSpaces
);
552 AssertEquals ("M05", myTicks
[6], t1
.Ticks
);
553 t1
= DateTime
.ParseExact ("Sun Nov 6 08:49:37 1994", formats
, enUS
,
554 DateTimeStyles
.AllowWhiteSpaces
);
555 AssertEquals ("M06", myTicks
[6], t1
.Ticks
);
558 t1
= DateTime
.ParseExact ("--12--", "--MM--" , null);
559 AssertEquals("Dash01", 12, t1
.Month
);
560 t1
=DateTime
.ParseExact ("--12-24", "--MM-dd" , null);
561 AssertEquals("Dash02", 24, t1
.Day
);
562 AssertEquals("Dash03", 12, t1
.Month
);
563 t1
=DateTime
.ParseExact ("---24", "---dd" , null);
564 AssertEquals("Dash04", 24, t1
.Day
);
567 t1
= DateTime
.ParseExact ("18Aug2004 12:33:00", "ddMMMyyyy hh:mm:ss", new CultureInfo ("en-US"));
568 AssertEquals ("hh allows 12, though it's useless", 0, t1
.Hour
);
571 [Ignore ("need to fix tests that run on different timezones")]
572 public void TestParse2 ()
574 DateTime t1
= DateTime
.Parse ("Mon, 25 Feb 2002 04:25:13 GMT");
575 t1
= TimeZone
.CurrentTimeZone
.ToUniversalTime(t1
);
576 AssertEquals ("H10d", 04 - TimeZone
.CurrentTimeZone
.GetUtcOffset(t1
).Hours
, t1
.Hour
);
580 public void TestParse ()
583 DateTime t1
= DateTime
.Parse ("02/25/2002");
584 AssertEquals ("H00", myTicks
[0], t1
.Ticks
);
586 t1
= DateTime
.Parse ("02-25-2002");
588 catch (Exception e
) {
589 Fail ("Unexpected exception. e=" + e
);
592 t1
= DateTime
.Parse ("2002-02-25");
594 catch (Exception e
) {
595 Fail ("Unexpected exception. e=" + e
);
597 AssertEquals ("H01", myTicks
[0], t1
.Ticks
);
598 t1
= DateTime
.Parse ("Monday, 25 February 2002");
599 AssertEquals ("H02", myTicks
[0], t1
.Ticks
);
600 t1
= DateTime
.Parse ("Monday, 25 February 2002 05:25");
601 AssertEquals ("H03", myTicks
[3], t1
.Ticks
);
602 t1
= DateTime
.Parse ("Monday, 25 February 2002 05:25:13");
603 AssertEquals ("H04", myTicks
[4], t1
.Ticks
);
604 t1
= DateTime
.Parse ("02/25/2002 05:25");
605 AssertEquals ("H05", myTicks
[3], t1
.Ticks
);
606 t1
= DateTime
.Parse ("02/25/2002 05:25:13");
607 AssertEquals ("H06", myTicks
[4], t1
.Ticks
);
608 t1
= DateTime
.Parse ("2002-02-25 04:25:13Z");
609 t1
= TimeZone
.CurrentTimeZone
.ToUniversalTime(t1
);
610 AssertEquals ("H07a", 2002, t1
.Year
);
611 AssertEquals ("H07b", 02, t1
.Month
);
612 AssertEquals ("H07c", 25, t1
.Day
);
613 AssertEquals ("H07d", 04, t1
.Hour
);
614 AssertEquals ("H07e", 25, t1
.Minute
);
615 AssertEquals ("H07f", 13, t1
.Second
);
617 DateTime t2
= new DateTime (DateTime
.Today
.Year
, 2, 25);
618 t1
= DateTime
.Parse ("February 25");
619 AssertEquals ("H08", t2
.Ticks
, t1
.Ticks
);
621 t2
= new DateTime (DateTime
.Today
.Year
, 2, 8);
622 t1
= DateTime
.Parse ("February 08");
623 AssertEquals ("H09", t2
.Ticks
, t1
.Ticks
);
625 // parsed as UTC string
626 t1
= DateTime
.Parse ("Mon, 25 Feb 2002 04:25:13 GMT");
627 t1
= TimeZone
.CurrentTimeZone
.ToUniversalTime (t1
);
628 AssertEquals ("H10a", 2002, t1
.Year
);
629 AssertEquals ("H10b", 02, t1
.Month
);
630 AssertEquals ("H10c", 25, t1
.Day
);
631 AssertEquals ("H10d", 4, t1
.Hour
);
632 AssertEquals ("H10e", 25, t1
.Minute
);
633 AssertEquals ("H10f", 13, t1
.Second
);
635 t1
= DateTime
.Parse ("2002-02-25T05:25:13");
636 AssertEquals ("H11", myTicks
[4], t1
.Ticks
);
638 t2
= DateTime
.Today
+ new TimeSpan (5,25,0);
639 t1
= DateTime
.Parse ("05:25");
640 AssertEquals("H12", t2
.Ticks
, t1
.Ticks
);
642 t2
= DateTime
.Today
+ new TimeSpan (5,25,13);
643 t1
= DateTime
.Parse ("05:25:13");
644 AssertEquals("H13", t2
.Ticks
, t1
.Ticks
);
646 t2
= new DateTime (2002, 2, 1);
647 t1
= DateTime
.Parse ("2002 February");
648 AssertEquals ("H14", t2
.Ticks
, t1
.Ticks
);
650 t2
= new DateTime (2002, 2, 1);
651 t1
= DateTime
.Parse ("2002 February");
652 AssertEquals ("H15", t2
.Ticks
, t1
.Ticks
);
654 t2
= new DateTime (DateTime
.Today
.Year
, 2, 8);
655 t1
= DateTime
.Parse ("February 8");
656 AssertEquals ("H16", t2
.Ticks
, t1
.Ticks
);
659 public void TestParse3 ()
661 string s
= "Wednesday, 09 June 2004";
662 DateTime
.ParseExact (s
, "dddd, dd MMMM yyyy", CultureInfo
.InvariantCulture
);
664 DateTime
.ParseExact (s
, "dddd, dd MMMM yyyy", new CultureInfo ("ja-JP"));
665 Fail ("ja-JP culture does not support format \"dddd, dd MMMM yyyy\"");
666 } catch (FormatException
) {
669 // Ok, now we can assume ParseExact() works expectedly.
671 DateTime
.Parse (s
, CultureInfo
.InvariantCulture
, DateTimeStyles
.AllowWhiteSpaces
);
672 DateTime
.Parse (s
, new CultureInfo ("ja-JP"), DateTimeStyles
.AllowWhiteSpaces
);
673 // DateTime.Parse (s, null); currently am not sure if it works for _every_ culture.
677 [ExpectedException(typeof (FormatException
))]
678 public void ParseFormatException1 ()
680 // Following string is not a correct French date i.e. dd/mm/yyyy.
681 String frDateTime
= "11/13/2003 11:28:15";
682 IFormatProvider format
= new CultureInfo("fr-FR", true);
683 DateTime t1
= DateTime
.Parse(frDateTime
, format
);
686 public void TestOA ()
688 double number
=5000.41443;
689 DateTime d
= DateTime
.FromOADate(number
);
690 DTAssertEquals ("I01", d
, new DateTime(1913, 9, 8, 9, 56, 46, 0), Resolution
.Second
);
691 AssertEquals ("I02", d
.ToOADate(), number
);
695 public void ParseAllowsQueerString ()
697 DateTime
.Parse ("Sat,,,,,, 01 Oct 1994 03:00:00", CultureInfo
.InvariantCulture
);
701 public void ParseUtcNonUtc ()
703 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("es-ES");
708 DateTimeFormatInfo dfi
= DateTimeFormatInfo
.InvariantInfo
;
709 s
= dfi
.UniversalSortableDateTimePattern
;
714 long tick1
= 631789220960000000; // 2003-01-23 12:34:56 as is
715 long tick2
= TimeZone
.CurrentTimeZone
.ToLocalTime (new DateTime (tick1
)).Ticks
; // adjusted to local time
718 ci
= CultureInfo
.InvariantCulture
;
720 d
= "2003/01/23 12:34:56";
721 dt
= DateTime
.Parse (d
, ci
);
722 AssertEquals (d
, tick1
, dt
.Ticks
);
724 d
= "2003/01/23 12:34:56 GMT";
725 dt
= DateTime
.Parse (d
, ci
);
726 AssertEquals (d
, tick2
, dt
.Ticks
);
728 d
= "Thu, 23 Jan 2003 12:34:56 GMT";
729 dt
= DateTime
.ParseExact (d
, s2
, ci
);
730 AssertEquals (d
, tick1
, dt
.Ticks
);
732 d
= "2003-01-23 12:34:56Z";
733 dt
= DateTime
.ParseExact (d
, s
, ci
);
734 AssertEquals (d
, tick1
, dt
.Ticks
);
736 d
= "2003-01-23T12:34:56";
737 dt
= DateTime
.ParseExact (d
, s3
, ci
);
738 AssertEquals (d
, tick1
, dt
.Ticks
);
740 // ja-JP ... it should be culture independent
741 ci
= new CultureInfo ("ja-JP");
743 d
= "2003/01/23 12:34:56";
744 dt
= DateTime
.Parse (d
, ci
);
745 AssertEquals (d
, tick1
, dt
.Ticks
);
747 d
= "2003/01/23 12:34:56 GMT";
748 dt
= DateTime
.Parse (d
, ci
);
749 AssertEquals (d
, tick2
, dt
.Ticks
);
751 d
= "Thu, 23 Jan 2003 12:34:56 GMT";
752 dt
= DateTime
.ParseExact (d
, s2
, ci
);
753 AssertEquals (d
, tick1
, dt
.Ticks
);
755 d
= "2003-01-23 12:34:56Z";
756 dt
= DateTime
.ParseExact (d
, s
, ci
);
757 AssertEquals (d
, tick1
, dt
.Ticks
);
759 d
= "2003-01-23T12:34:56";
760 dt
= DateTime
.ParseExact (d
, s3
, ci
);
761 AssertEquals (d
, tick1
, dt
.Ticks
);
765 public void TimeZoneAdjustment ()
767 CultureInfo ci
= Thread
.CurrentThread
.CurrentCulture
;
769 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("en-US");
770 DateTime d1
= DateTime
.ParseExact ("2004/06/30", "yyyy/MM/dd", null);
771 DateTime d2
= DateTime
.ParseExact ("2004/06/30Z", "yyyy/MM/dd'Z'", null);
772 DateTime d3
= DateTime
.ParseExact ("Wed, 30 Jun 2004 00:00:00 GMT", "ddd, dd MMM yyyy HH':'mm':'ss 'GMT'", null);
773 DateTime d4
= DateTime
.ParseExact ("2004-06-30 00:00:00Z", "yyyy'-'MM'-'dd HH':'mm':'ss'Z'", null);
774 StringWriter sw
= new StringWriter ();
775 sw
.Write ("{0} {1}", d1
.Ticks
, d1
);
776 AssertEquals ("#1", "632241504000000000 6/30/2004 12:00:00 AM", sw
.ToString ());
777 sw
.GetStringBuilder ().Length
= 0;
778 sw
.Write ("{0} {1}", d2
.Ticks
, d2
);
779 AssertEquals ("#2", "632241504000000000 6/30/2004 12:00:00 AM", sw
.ToString ());
780 sw
.GetStringBuilder ().Length
= 0;
781 sw
.Write ("{0} {1}", d3
.Ticks
, d3
);
782 AssertEquals ("#3", "632241504000000000 6/30/2004 12:00:00 AM", sw
.ToString ());
783 sw
.GetStringBuilder ().Length
= 0;
784 sw
.Write ("{0} {1}", d4
.Ticks
, d4
);
785 AssertEquals ("#4", "632241504000000000 6/30/2004 12:00:00 AM", sw
.ToString ());
787 Thread
.CurrentThread
.CurrentCulture
= ci
;
792 [ExpectedException (typeof (ArgumentException
))]
793 public void FromOADate_Min ()
795 // minimum documented value isn't inclusive
796 DateTime
.FromOADate (-657435.0d
);
800 [ExpectedException (typeof (ArgumentException
))]
801 public void FromOADate_Max ()
803 // maximum documented value isn't inclusive
804 DateTime
.FromOADate (2958466.0d
);
808 public void FromOADate ()
810 // Note: OA (OLE Automation) dates aren't timezone sensitive
811 AssertEquals ("Ticks-Zero", 599264352000000000, DateTime
.FromOADate (0.0d
).Ticks
);
812 AssertEquals ("Ticks-Min", 31242239136000000, DateTime
.FromOADate (-657434.999d
).Ticks
);
813 AssertEquals ("Ticks-Max", 3155378975136000000, DateTime
.FromOADate (2958465.999d
).Ticks
);
817 public void ToOADate ()
819 // Note: OA (OLE Automation) dates aren't timezone sensitive
820 DateTime d
= new DateTime (0);
821 AssertEquals ("Unititialized", 0.0d
, d
.ToOADate ());
822 d
= new DateTime (599264352000000000);
823 AssertEquals ("Ticks-Zero", 0.0d
, d
.ToOADate ());
824 d
= new DateTime (31242239136000000);
825 AssertEquals ("Ticks-Min", -657434.999d
, d
.ToOADate ());
826 d
= new DateTime (3155378975136000000);
827 AssertEquals ("Ticks-Max", 2958465.999d
, d
.ToOADate ());
831 public void ToOADate_OverMax ()
833 DateTime d
= new DateTime (3155378975136000001);
834 AssertEquals ("Over-Max", 2958465.999d
, d
.ToOADate ());
838 public void ToOADate_MaxValue ()
840 AssertEquals ("MaxValue", 2958465.99999999d
, DateTime
.MaxValue
.ToOADate ());
844 public void ToOADate_UnderMin ()
846 DateTime d
= new DateTime (31242239135999999);
847 AssertEquals ("Under-Min", -657434.999d
, d
.ToOADate ());
851 public void ToOADate_MinValue ()
853 AssertEquals ("MinValue", 0, DateTime
.MinValue
.ToOADate ());
857 public void MaxValueYear () // bug52075
859 AssertEquals ("#01", "9999", DateTime
.MaxValue
.Year
.ToString ());
863 public void X509Certificate ()
865 // if this test fails then *ALL* or *MOST* X509Certificate tests will also fails
866 AssertEquals ("yyyyMMddHHmmssZ", "03/12/1996 18:38:47", DateTime
.ParseExact ("19960312183847Z", "yyyyMMddHHmmssZ", null).ToUniversalTime ().ToString ());
867 // technically this is invalid (PKIX) because of the missing seconds but it exists so...
868 AssertEquals ("yyMMddHHmmZ", "02/23/1996 19:15:00", DateTime
.ParseExact ("9602231915Z", "yyMMddHHmmZ", null).ToUniversalTime ().ToString ());
870 // However, "Z" and "'Z'" are different.
871 AssertEquals ("Z timezone handling",
872 DateTime
.ParseExact ("19960312183847Z", "yyyyMMddHHmmss'Z'", null).ToLocalTime (),
873 DateTime
.ParseExact ("19960312183847Z", "yyyyMMddHHmmssZ", null));
877 public void QuotedFormat () // bug 56436
879 string date
= "28/Mar/2004:19:12:37 +0200";
880 string [] expectedFormats
= {"dd\"/\"MMM\"/\"yyyy:HH:mm:ss zz\"00\""}
;
881 DateTime mydate
= DateTime
.ParseExact (date
, expectedFormats
, null, DateTimeStyles
.AllowWhiteSpaces
);
885 public void CultureIndependentTests ()
887 // Here I aggregated some tests mainly because of test
888 // performance (iterating all the culture is heavy process).
890 for (int i
= 0; i
< 32768; i
++) {
891 CultureInfo ci
= null;
892 string stage
= "init";
895 ci
= new CultureInfo (i
);
896 // In fact InvatiantCulture is not neutral.
898 if (ci
.IsNeutralCulture
&& ci
!= CultureInfo
.InvariantCulture
)
900 } catch (Exception
) {
903 Thread
.CurrentThread
.CurrentCulture
= ci
;
907 // X509Certificate pattern is _always_ accepted.
909 dt
= DateTime
.ParseExact ("19960312183847Z", "yyyyMMddHHmmssZ", null);
912 // culture 1025 ar-SA fails
914 // dt = DateTime.Parse ("19960312183847Z");
917 dt
= DateTime
.Parse ("2004-05-26T03:29:01.1234567");
919 dt
= DateTime
.Parse ("2004-05-26T03:29:01.1234567-07:00");
921 // memo: the least LCID is 127, and then 1025(ar-SA)
923 // "th-TH" locale rejects them since in
924 // ThaiBuddhistCalendar the week of a day is different.
925 // (and also for years).
926 if (ci
.LCID
!= 1054) {
929 dt
= DateTime
.Parse ("Sat, 29 Oct 1994 12:00:00 GMT", ci
);
930 } catch (FormatException ex
) {
931 Fail (String
.Format ("stage 5.1 RFC1123: culture {0} {1} failed: {2}", i
, ci
, ex
.Message
));
933 /* comment out until we fix RFC1123
935 if (dt != TimeZone.CurrentTimeZone.ToUniversalTime (dt))
936 Assert (String.Format ("bug #47720 on culture {0} {1}", ci.LCID, ci), 12 != dt.Hour);
938 // variant of RFC1123
941 dt
= DateTime
.Parse ("Sat, 1 Oct 1994 03:00:00", ci
);
942 } catch (FormatException ex
) {
943 Fail (String
.Format ("stage 6.1 RFC1123 variant: culture {0} {1} failed: {2}", i
, ci
, ex
.Message
));
946 AssertEquals (String
.Format ("stage 7.1 RFC1123 variant on culture {0} {1}", ci
.LCID
, ci
), 3, dt
.Hour
);
956 // 02/25/2002 04:25:13 as is
957 long tick1
= 631502079130000000;
958 long tick2
= TimeZone
.CurrentTimeZone
.ToLocalTime (new DateTime (tick1
)).Ticks
; // adjusted to local time
959 dt
= DateTime
.Parse ("Mon, 25 Feb 2002 04:25:13 GMT", ci
);
960 AssertEquals (String
.Format ("GMT variant. culture={0} {1}", i
, ci
), tick2
, dt
.Ticks
);
965 // ka-GE rejects these formats under MS.NET.
966 // I wonder why. Also, those tests fail under .NET 1.0.
967 if (ci
.LCID
!= 1079) {
969 dt
= DateTime
.Parse ("2002-02-25");
971 dt
= DateTime
.Parse ("2002-02-25Z");
973 dt
= DateTime
.Parse ("2002-02-25T19:20:00+09:00");
975 case 1038: // FIXME: MS passes this culture.
976 case 1062: // FIXME: MS passes this culture.
977 case 1078: // MS does not pass this culture. Dunno why.
982 dt
= DateTime
.Parse ("2002#02#25 19:20:00");
984 AssertEquals (String
.Format ("bug #58938 on culture {0} {1}", ci
.LCID
, ci
), 19, dt
.Hour
);
988 dt
= DateTime
.Parse ("2002-02-25 12:01:03");
990 dt
= DateTime
.Parse ("2002#02#25 12:01:03");
992 dt
= DateTime
.Parse ("2002%02%25 12:01:03");
994 if (ci
.DateTimeFormat
.TimeSeparator
!= ".")
995 dt
= DateTime
.Parse ("2002.02.25 12:01:03");
997 dt
= DateTime
.Parse ("2003/01/23 01:34:56 GMT");
998 dt
= TimeZone
.CurrentTimeZone
.ToUniversalTime (dt
);
999 AssertEquals (String
.Format ("stage 18.1 RFC1123 UTC {0} {1}", i
, ci
), 1, dt
.Hour
);
1001 // This test was fixed from 12:34:56 to
1002 // 01:34:56 since 1078 af-ZA failed
1003 // because of hour interpretation
1004 // difference (af-ZA expects 0).
1005 // (IMHO it is MS BUG though.)
1006 dt
= DateTime
.Parse ("2003/01/23 12:34:56 GMT");
1007 dt
= TimeZone
.CurrentTimeZone
.ToUniversalTime (dt
);
1009 AssertEquals (String
.Format ("stage 18.1 RFC1123 UTC {0} {1}", i
, ci
), 12, dt
.Hour
);
1012 } catch (FormatException ex
) {
1013 Fail (String
.Format ("stage {3}: Culture {0} {1} failed: {2}", i
, ci
, ex
.Message
, stage
));
1019 [ExpectedException (typeof (ArgumentOutOfRangeException
))]
1020 public void ToFileTime_MinValue ()
1022 DateTime
.FromFileTime (Int64
.MinValue
);
1026 [ExpectedException (typeof (ArgumentOutOfRangeException
))]
1027 public void ToFileTime_Negative ()
1029 DateTime
.FromFileTime (-1);
1033 public void ToFileTime ()
1035 long u
= DateTime
.FromFileTimeUtc (0).Ticks
;
1036 AssertEquals ("Utc-0", 504911232000000000, u
);
1037 long max
= DateTime
.MaxValue
.Ticks
- 504911232000000000; // w32file_epoch
1038 AssertEquals ("Utc-MaxValue", 3155378975999999999, DateTime
.FromFileTimeUtc (max
).Ticks
);
1040 long t
= DateTime
.FromFileTime (0).Ticks
;
1041 Assert ("ToFileTime>", t
> (u
- TimeSpan
.TicksPerDay
));
1042 Assert ("ToFileTime<", t
< (u
+ TimeSpan
.TicksPerDay
));
1046 [ExpectedException (typeof (ArgumentOutOfRangeException
))]
1047 public void ToFileTimeUtc_MinValue ()
1049 DateTime
.FromFileTimeUtc (Int64
.MinValue
);
1053 [ExpectedException (typeof (ArgumentOutOfRangeException
))]
1054 public void ToFileTimeUtc_Negative ()
1056 DateTime
.FromFileTimeUtc (-1);
1060 public void Milliseconds ()
1062 DateTime dt
= DateTime
.Parse ("2004-05-26T03:29:01.1234567-07:00");
1063 dt
= TimeZone
.CurrentTimeZone
.ToUniversalTime (dt
);
1064 AssertEquals ("DateTime with milliseconds", 632211641411234567, dt
.Ticks
);
1068 public void ParseNotExact ()
1070 DateTime dt
= DateTime
.Parse ("2004-05-26T03:29:01-07:00 foo");
1071 dt
= TimeZone
.CurrentTimeZone
.ToUniversalTime (dt
);
1072 AssertEquals ("DateTime.Parse not exact", 632211641410000000, dt
.Ticks
);
1076 [ExpectedException (typeof (FormatException
))]
1077 public void ParseExactIsExact()
1079 DateTime
.ParseExact ("2004-05-26T03:29:01-07:00 foo", "yyyy-MM-ddTHH:mm:sszzz", null);
1083 [ExpectedException (typeof (FormatException
))]
1084 public void ParseExactDoesNotEatZ ()
1086 DateTime
.ParseExact ("2004-05-26T03:29:01", "yyyy-MM-ddTHH:mm:ssZ", null);
1090 public void ParseExactMilliseconds ()
1092 DateTime dt
= DateTime
.ParseExact ("2004-05-26T03:29:01.1234567-07:00", "yyyy-MM-ddTHH:mm:ss.fffffffzzz", null);
1093 dt
= TimeZone
.CurrentTimeZone
.ToUniversalTime (dt
);
1094 AssertEquals ("DateTime.ParseExact with milliseconds", 632211641411234567, dt
.Ticks
);
1098 public void NoColonTimeZone ()
1100 AssertEquals ("DateTime with colon-less timezone", true, DateTime
.Parse ("2004-05-26T03:29:01-0700").Ticks
!= DateTime
.Parse ("2004-05-26T03:29:01-0800").Ticks
);
1104 public void WithColonTimeZone ()
1106 AssertEquals ("DateTime with colon tiemzone", true, DateTime
.Parse ("2004-05-26T03:29:01-07:00").Ticks
!= DateTime
.Parse ("2004-05-26T03:29:01-08:00").Ticks
);
1110 [ExpectedException (typeof (InvalidCastException
))]
1111 public void IConvertible_ToType_Boolean ()
1113 ((IConvertible
)DateTime
.Now
).ToType (typeof (bool), null);
1117 [ExpectedException (typeof (InvalidCastException
))]
1118 public void IConvertible_ToType_Byte ()
1120 ((IConvertible
)DateTime
.Now
).ToType (typeof (byte), null);
1124 [ExpectedException (typeof (InvalidCastException
))]
1125 public void IConvertible_ToType_Char ()
1127 ((IConvertible
)DateTime
.Now
).ToType (typeof (char), null);
1131 public void IConvertible_ToType_DateTime ()
1133 DateTime dt
= DateTime
.Now
;
1134 DateTime dt2
= (DateTime
) ((IConvertible
)dt
).ToType (typeof (DateTime
), null);
1135 Assert ("Object", dt
.Equals (dt2
));
1139 [ExpectedException (typeof (InvalidCastException
))]
1140 public void IConvertible_ToType_DBNull ()
1142 ((IConvertible
)DateTime
.Now
).ToType (typeof (DBNull
), null);
1146 [ExpectedException (typeof (InvalidCastException
))]
1147 public void IConvertible_ToType_Decimal ()
1149 ((IConvertible
)DateTime
.Now
).ToType (typeof (decimal), null);
1153 [ExpectedException (typeof (InvalidCastException
))]
1154 public void IConvertible_ToType_Double ()
1156 ((IConvertible
)DateTime
.Now
).ToType (typeof (double), null);
1160 [ExpectedException (typeof (ArgumentNullException
))]
1161 public void IConvertible_ToType_Empty ()
1163 ((IConvertible
)DateTime
.Now
).ToType (null, null);
1167 [ExpectedException (typeof (InvalidCastException
))]
1168 public void IConvertible_ToType_Int16 ()
1170 ((IConvertible
)DateTime
.Now
).ToType (typeof (short), null);
1174 [ExpectedException (typeof (InvalidCastException
))]
1175 public void IConvertible_ToType_Int32 ()
1177 ((IConvertible
)DateTime
.Now
).ToType (typeof (int), null);
1181 [ExpectedException (typeof (InvalidCastException
))]
1182 public void IConvertible_ToType_Int64 ()
1184 ((IConvertible
)DateTime
.Now
).ToType (typeof (long), null);
1188 public void IConvertible_ToType_Object ()
1190 DateTime dt
= DateTime
.Now
;
1191 object o
= ((IConvertible
)dt
).ToType (typeof (object), null);
1192 Assert ("Object", dt
.Equals (o
));
1196 [ExpectedException (typeof (InvalidCastException
))]
1197 public void IConvertible_ToType_SByte ()
1199 ((IConvertible
)DateTime
.Now
).ToType (typeof (sbyte), null);
1203 [ExpectedException (typeof (InvalidCastException
))]
1204 public void IConvertible_ToType_Single ()
1206 ((IConvertible
)DateTime
.Now
).ToType (typeof (float), null);
1210 public void IConvertible_ToType_String ()
1212 DateTime dt
= DateTime
.Now
;
1213 string s
= (string) ((IConvertible
)dt
).ToType (typeof (string), null);
1214 AssertEquals ("String", dt
.ToString (), s
);
1218 [ExpectedException (typeof (InvalidCastException
))]
1219 public void IConvertible_ToType_UInt16 ()
1221 ((IConvertible
)DateTime
.Now
).ToType (typeof (ushort), null);
1225 [ExpectedException (typeof (InvalidCastException
))]
1226 public void IConvertible_ToType_UInt32 ()
1228 ((IConvertible
)DateTime
.Now
).ToType (typeof (uint), null);
1232 [ExpectedException (typeof (InvalidCastException
))]
1233 public void IConvertible_ToType_UInt64 ()
1235 ((IConvertible
)DateTime
.Now
).ToType (typeof (ulong), null);