2 // DateTimeTest.cs - NUnit Test Cases for the System.DateTime struct
\r
5 // Martin Baulig (martin@gnome.org)
\r
7 // (C) 2002 Free Software Foundation
\r
10 using NUnit.Framework;
\r
12 using System.Threading;
\r
13 using System.Globalization;
\r
15 namespace MonoTests.System
\r
19 public class DateTimeTest : Assertion
\r
22 internal enum Resolution : ushort {
\r
38 internal void DTAssertEquals (DateTime actual, DateTime expected, Resolution resolution) {
\r
39 DTAssertEquals ("", actual, expected, resolution);
\r
42 internal void DTAssertEquals (string message, DateTime expected, DateTime actual, Resolution resolution) {
\r
43 if ((resolution & Resolution.Year) != 0)
\r
44 AssertEquals (message, expected.Year, actual.Year);
\r
45 if ((resolution & Resolution._Month) != 0)
\r
46 AssertEquals (message, expected.Month, actual.Month);
\r
47 if ((resolution & Resolution._Day) != 0)
\r
48 AssertEquals (message, expected.Day, actual.Day);
\r
49 if ((resolution & Resolution._Hour) != 0)
\r
50 AssertEquals (message, expected.Hour, actual.Hour);
\r
51 if ((resolution & Resolution._Minute) != 0)
\r
52 AssertEquals (message, expected.Minute, actual.Minute);
\r
53 if ((resolution & Resolution._Second) != 0)
\r
54 AssertEquals (message, expected.Second, actual.Second);
\r
55 if ((resolution & Resolution._Millisecond) != 0)
\r
56 AssertEquals (message, expected.Millisecond, actual.Millisecond);
\r
59 private CultureInfo oldcult;
\r
62 631501920000000000L, // 25 Feb 2002 - 00:00:00
\r
63 631502475130080000L, // 25 Feb 2002 - 15:25:13,8
\r
64 631502115130080000L, // 25 Feb 2002 - 05:25:13,8
\r
65 631502115000000000L, // 25 Feb 2002 - 05:25:00
\r
66 631502115130000000L, // 25 Feb 2002 - 05:25:13
\r
67 631502079130000000L, // 25 Feb 2002 - 04:25:13
\r
68 629197085770000000L // 06 Nov 1994 - 08:49:37
\r
71 public DateTimeTest() {}
\r
74 public void SetUp()
\r
76 // the current culture determines the result of formatting
\r
77 oldcult = Thread.CurrentThread.CurrentCulture;
\r
78 Thread.CurrentThread.CurrentCulture = new CultureInfo ("");
\r
82 public void TearDown ()
\r
84 Thread.CurrentThread.CurrentCulture = oldcult;
\r
87 public void TestCtors ()
\r
89 DateTime t1 = new DateTime (2002,2,25);
\r
90 AssertEquals("A01", myTicks[0], t1.Ticks);
\r
91 DateTime t2 = new DateTime (2002,2,25,15,25,13,8);
\r
92 AssertEquals("A02", myTicks[1], t2.Ticks);
\r
93 AssertEquals("A03", myTicks[0], t2.Date.Ticks);
\r
94 AssertEquals("A04", 2002, t2.Year);
\r
95 AssertEquals("A05", 2, t2.Month);
\r
96 AssertEquals("A06", 25, t2.Day);
\r
97 AssertEquals("A07", 15, t2.Hour);
\r
98 AssertEquals("A08", 25, t2.Minute);
\r
99 AssertEquals("A09", 13, t2.Second);
\r
100 AssertEquals("A10", 8, t2.Millisecond);
\r
101 DateTime t3 = new DateTime (2002,2,25,5,25,13,8);
\r
102 AssertEquals("A11", myTicks[2], t3.Ticks);
\r
106 public void Fields ()
\r
108 AssertEquals ("J01", 3155378975999999999L, DateTime.MaxValue.Ticks);
\r
109 AssertEquals ("J02", 0, DateTime.MinValue.Ticks);
\r
115 DateTime t1 = new DateTime (myTicks [1]);
\r
116 TimeSpan span = new TimeSpan (3, 54, 1);
\r
117 DateTime t2 = t1.Add (span);
\r
119 AssertEquals ("K01", 25, t2.Day);
\r
120 AssertEquals ("K02", 19, t2.Hour);
\r
121 AssertEquals ("K03", 19, t2.Minute);
\r
122 AssertEquals ("K04", 14, t2.Second);
\r
124 AssertEquals ("K05", 25, t1.Day);
\r
125 AssertEquals ("K06", 15, t1.Hour);
\r
126 AssertEquals ("K07", 25, t1.Minute);
\r
127 AssertEquals ("K08", 13, t1.Second);
\r
131 [ExpectedException(typeof (ArgumentOutOfRangeException))]
\r
132 public void AddOutOfRangeException1 ()
\r
134 DateTime t1 = new DateTime (myTicks [1]);
\r
135 t1.Add (TimeSpan.MaxValue);
\r
139 [ExpectedException(typeof (ArgumentOutOfRangeException))]
\r
140 public void AddOutOfRangeException2 ()
\r
142 DateTime t1 = new DateTime (myTicks [1]);
\r
143 t1.Add (TimeSpan.MinValue);
\r
147 public void AddDays ()
\r
149 DateTime t1 = new DateTime (myTicks [1]);
\r
150 t1 = t1.AddDays (3);
\r
151 AssertEquals ("L01", 28, t1.Day);
\r
152 AssertEquals ("L02", 15, t1.Hour);
\r
153 AssertEquals ("L03", 25, t1.Minute);
\r
154 AssertEquals ("L04", 13, t1.Second);
\r
156 t1 = t1.AddDays (1.9);
\r
157 AssertEquals ("L05", 2, t1.Day);
\r
158 AssertEquals ("L06", 13, t1.Hour);
\r
159 AssertEquals ("L07", 1, t1.Minute);
\r
160 AssertEquals ("L08", 13, t1.Second);
\r
162 t1 = t1.AddDays (0.2);
\r
163 AssertEquals ("L09", 2, t1.Day);
\r
164 AssertEquals ("L10", 17, t1.Hour);
\r
165 AssertEquals ("L11", 49, t1.Minute);
\r
166 AssertEquals ("L12", 13, t1.Second);
\r
170 [ExpectedException(typeof (ArgumentOutOfRangeException))]
\r
171 public void AddDaysOutOfRangeException1 ()
\r
173 DateTime t1 = new DateTime (myTicks [1]);
\r
174 t1.AddDays (10000000);
\r
178 [ExpectedException(typeof (ArgumentOutOfRangeException))]
\r
179 public void AddDaysOutOfRangeException2 ()
\r
181 DateTime t1 = new DateTime (myTicks [1]);
\r
182 t1.AddDays (-10000000);
\r
186 public void AddHours ()
\r
188 DateTime t1 = new DateTime (myTicks [1]);
\r
189 t1 = t1.AddHours (10);
\r
190 AssertEquals ("N01", 26, t1.Day);
\r
191 AssertEquals ("N02", 1, t1.Hour);
\r
192 AssertEquals ("N03", 25, t1.Minute);
\r
193 AssertEquals ("N04", 13, t1.Second);
\r
195 t1 = t1.AddHours (-3.7);
\r
196 AssertEquals ("N05", 25, t1.Day);
\r
197 AssertEquals ("N06", 21, t1.Hour);
\r
198 AssertEquals ("N07", 43, t1.Minute);
\r
199 AssertEquals ("N08", 13, t1.Second);
\r
201 t1 = t1.AddHours (3.732);
\r
202 AssertEquals ("N09", 26, t1.Day);
\r
203 AssertEquals ("N10", 1, t1.Hour);
\r
204 AssertEquals ("N11", 27, t1.Minute);
\r
205 AssertEquals ("N12", 8, t1.Second);
\r
209 [ExpectedException (typeof (ArgumentOutOfRangeException))]
\r
210 public void AddHoursOutOfRangeException1 ()
\r
212 DateTime t1 = new DateTime (myTicks [1]);
\r
213 t1.AddHours (9E100);
\r
217 [ExpectedException (typeof (ArgumentOutOfRangeException))]
\r
218 public void AddHoursOutOfRangeException2 ()
\r
220 DateTime t1 = new DateTime (myTicks [1]);
\r
221 t1.AddHours (-9E100);
\r
225 public void AddMilliseconds ()
\r
227 DateTime t1 = new DateTime (myTicks [1]);
\r
228 t1 = t1.AddMilliseconds (1E10);
\r
229 AssertEquals ("O01", 21, t1.Day);
\r
230 AssertEquals ("O02", 9, t1.Hour);
\r
231 AssertEquals ("O03", 11, t1.Minute);
\r
232 AssertEquals ("O04", 53, t1.Second);
\r
234 t1 = t1.AddMilliseconds (-19E10);
\r
235 AssertEquals ("O05", 13, t1.Day);
\r
236 AssertEquals ("O06", 7, t1.Hour);
\r
237 AssertEquals ("O07", 25, t1.Minute);
\r
238 AssertEquals ("O08", 13, t1.Second);
\r
240 t1 = t1.AddMilliseconds (15.623);
\r
241 AssertEquals ("O09", 13, t1.Day);
\r
242 AssertEquals ("O10", 7, t1.Hour);
\r
243 AssertEquals ("O11", 25, t1.Minute);
\r
244 AssertEquals ("O12", 13, t1.Second);
\r
248 [ExpectedException (typeof (ArgumentOutOfRangeException))]
\r
249 public void AddMillisecondsOutOfRangeException1 ()
\r
251 DateTime t1 = new DateTime (myTicks [1]);
\r
252 t1.AddMilliseconds (9E100);
\r
256 [ExpectedException (typeof (ArgumentOutOfRangeException))]
\r
257 public void AddMillisecondsOutOfRangeException2 ()
\r
259 DateTime t1 = new DateTime (myTicks [1]);
\r
260 t1.AddMilliseconds (-9E100);
\r
264 public void TestToString ()
\r
266 DateTime t1 = new DateTime (myTicks[2]);
\r
267 DateTime t2 = new DateTime (myTicks[1]);
\r
268 // Standard patterns
\r
269 AssertEquals("B01", "02/25/2002", t1.ToString ("d"));
\r
270 AssertEquals("B02", "Monday, 25 February 2002", t1.ToString ("D"));
\r
271 AssertEquals("B03", "Monday, 25 February 2002 05:25", t1.ToString ("f"));
\r
272 AssertEquals("B04", "Monday, 25 February 2002 05:25:13", t1.ToString ("F"));
\r
273 AssertEquals("B05", "02/25/2002 05:25", t1.ToString ("g"));
\r
274 AssertEquals("B06", "02/25/2002 05:25:13", t1.ToString ("G"));
\r
275 AssertEquals("B07", "February 25", t1.ToString ("m"));
\r
276 AssertEquals("B08", "February 25", t1.ToString ("M"));
\r
277 AssertEquals("B09", "Mon, 25 Feb 2002 05:25:13 GMT", t1.ToString ("r"));
\r
278 AssertEquals("B10", "Mon, 25 Feb 2002 05:25:13 GMT", t1.ToString ("R"));
\r
279 AssertEquals("B11", "2002-02-25T05:25:13", t1.ToString ("s"));
\r
280 AssertEquals("B12", "05:25", t1.ToString ("t"));
\r
281 AssertEquals("B13", "05:25:13", t1.ToString ("T"));
\r
282 //AssertEquals("B14", "2002-02-25 05:25:13Z", t1.ToString ("u"));
\r
283 //AssertEquals("B15", "Sunday, 24 February 2002 11:25:13", t1.ToString ("U"));
\r
284 AssertEquals("B16", "2002 February", t1.ToString ("y"));
\r
285 AssertEquals("B17", "2002 February", t1.ToString ("Y"));
\r
288 AssertEquals("C01", "25", t1.ToString ("%d"));
\r
289 AssertEquals("C02", "25", t1.ToString ("dd"));
\r
290 AssertEquals("C03", "Mon", t1.ToString ("ddd"));
\r
291 AssertEquals("C04", "Monday", t1.ToString ("dddd"));
\r
292 AssertEquals("C05", "2", t1.ToString ("%M"));
\r
293 AssertEquals("C06", "02", t1.ToString ("MM"));
\r
294 AssertEquals("C07", "Feb", t1.ToString ("MMM"));
\r
295 AssertEquals("C08", "February", t1.ToString ("MMMM"));
\r
296 AssertEquals("C09", "2", t1.ToString ("%y"));
\r
297 AssertEquals("C10", "02", t1.ToString ("yy"));
\r
298 AssertEquals("C11", "2002", t1.ToString ("yyyy"));
\r
299 AssertEquals("C12", "5", t1.ToString ("%h"));
\r
300 AssertEquals("C13", "05", t1.ToString ("hh"));
\r
301 AssertEquals("C14", "3", t2.ToString ("%h"));
\r
302 AssertEquals("C15", "03", t2.ToString ("hh"));
\r
303 AssertEquals("C16", "15", t2.ToString ("%H"));
\r
304 AssertEquals("C17", "15", t2.ToString ("HH"));
\r
305 AssertEquals("C18", "25", t2.ToString ("%m"));
\r
306 AssertEquals("C19", "25", t2.ToString ("mm"));
\r
307 AssertEquals("C20", "13", t2.ToString ("%s"));
\r
308 AssertEquals("C21", "13", t2.ToString ("ss"));
\r
309 AssertEquals("C22", "A", t1.ToString ("%t"));
\r
310 AssertEquals("C23", "P", t2.ToString ("%t"));
\r
311 AssertEquals("C24", "AM", t1.ToString ("tt"));
\r
312 AssertEquals("C25", "PM", t2.ToString ("tt"));
\r
313 long offset = TimeZone.CurrentTimeZone.GetUtcOffset(t1).Ticks / 36000000000;
\r
314 AssertEquals("C26", offset.ToString("+#;-#;0"), t1.ToString ("%z"));
\r
315 AssertEquals("C27", offset.ToString("+00;-00;00"), t1.ToString ("zz"));
\r
316 AssertEquals("C28", offset.ToString("+00;-00;00") + ":00", t1.ToString ("zzz"));
\r
317 AssertEquals("C29", " : ", t1.ToString (" : "));
\r
318 AssertEquals("C30", " / ", t1.ToString (" / "));
\r
319 AssertEquals("C31", " yyy ", t1.ToString (" 'yyy' "));
\r
320 AssertEquals("C32", " d", t1.ToString (" \\d"));
\r
323 [Ignore ("need a better way to handle these tests with them running on different timezones")]
\r
324 public void TestParseExact2 ()
\r
326 DateTime t1 = DateTime.ParseExact ("2002-02-25 04:25:13Z", "u", null);
\r
327 t1 = TimeZone.CurrentTimeZone.ToUniversalTime(t1);
\r
328 AssertEquals ("D07d", 04 + TimeZone.CurrentTimeZone.GetUtcOffset(t1).Hours, t1.Hour);
\r
332 public void TestParseExact ()
\r
334 // Standard patterns
\r
335 DateTime t1 = DateTime.ParseExact ("02/25/2002", "d", null);
\r
336 AssertEquals ("D01", myTicks[0], t1.Ticks);
\r
337 t1 = DateTime.ParseExact ("Monday, 25 February 2002", "D", null);
\r
338 AssertEquals ("D02", myTicks[0], t1.Ticks);
\r
339 t1 = DateTime.ParseExact ("Monday, 25 February 2002 05:25", "f", null);
\r
340 AssertEquals ("D03", myTicks[3], t1.Ticks);
\r
341 t1 = DateTime.ParseExact ("Monday, 25 February 2002 05:25:13", "F", null);
\r
342 AssertEquals ("D04", myTicks[4], t1.Ticks);
\r
343 t1 = DateTime.ParseExact ("02/25/2002 05:25", "g", null);
\r
344 AssertEquals ("D05", myTicks[3], t1.Ticks);
\r
345 t1 = DateTime.ParseExact ("02/25/2002 05:25:13", "G", null);
\r
346 AssertEquals ("D06", myTicks[4], t1.Ticks);
\r
347 t1 = DateTime.ParseExact ("2002-02-25 04:25:13Z", "u", null);
\r
348 AssertEquals ("D07a", 2002, t1.Year);
\r
349 AssertEquals ("D07b", 02, t1.Month);
\r
350 AssertEquals ("D07c", 25, t1.Day);
\r
351 AssertEquals ("D07e", 25, t1.Minute);
\r
352 AssertEquals ("D07f", 13, t1.Second);
\r
353 t1 = DateTime.ParseExact ("Monday, 25 February 2002 04:25:13", "U", null);
\r
354 t1 = TimeZone.CurrentTimeZone.ToUniversalTime(t1);
\r
355 AssertEquals ("D08a", 2002, t1.Year);
\r
356 AssertEquals ("D08b", 02, t1.Month);
\r
357 AssertEquals ("D08c", 25, t1.Day);
\r
358 AssertEquals ("D08d", 04, t1.Hour);
\r
359 AssertEquals ("D08e", 25, t1.Minute);
\r
360 AssertEquals ("D08f", 13, t1.Second);
\r
362 DateTime t2 = new DateTime (DateTime.Today.Year, 2, 25);
\r
363 t1 = DateTime.ParseExact ("February 25", "m", null);
\r
364 AssertEquals ("D09", t2.Ticks, t1.Ticks);
\r
366 t2 = new DateTime (DateTime.Today.Year, 2, 25);
\r
367 t1 = DateTime.ParseExact ("February 25", "M", null);
\r
368 AssertEquals ("D10", t2.Ticks, t1.Ticks);
\r
370 t1 = DateTime.ParseExact ("Mon, 25 Feb 2002 04:25:13 GMT", "r", null);
\r
371 AssertEquals ("D11a", 2002, t1.Year);
\r
372 AssertEquals ("D11b", 02, t1.Month);
\r
373 AssertEquals ("D11c", 25, t1.Day);
\r
374 AssertEquals ("D11d", 04, t1.Hour);
\r
375 AssertEquals ("D11e", 25, t1.Minute);
\r
376 AssertEquals ("D11f", 13, t1.Second);
\r
378 t1 = DateTime.ParseExact ("Mon, 25 Feb 2002 04:25:13 GMT", "R", null);
\r
379 AssertEquals ("D12a", 2002, t1.Year);
\r
380 AssertEquals ("D12b", 02, t1.Month);
\r
381 AssertEquals ("D12c", 25, t1.Day);
\r
382 AssertEquals ("D12d", 04, t1.Hour);
\r
383 AssertEquals ("D12e", 25, t1.Minute);
\r
384 AssertEquals ("D12f", 13, t1.Second);
\r
386 t1 = DateTime.ParseExact ("2002-02-25T05:25:13", "s", null);
\r
387 AssertEquals ("D13", myTicks[4], t1.Ticks);
\r
389 t2 = DateTime.Today + new TimeSpan (5,25,0);
\r
390 t1 = DateTime.ParseExact ("05:25", "t", null);
\r
391 AssertEquals("D14", t2.Ticks, t1.Ticks);
\r
393 t2 = DateTime.Today + new TimeSpan (5,25,13);
\r
394 t1 = DateTime.ParseExact ("05:25:13", "T", null);
\r
395 AssertEquals("D15", t2.Ticks, t1.Ticks);
\r
397 t2 = new DateTime (2002, 2, 1);
\r
398 t1 = DateTime.ParseExact ("2002 February", "y", null);
\r
399 AssertEquals ("D16", t2.Ticks, t1.Ticks);
\r
401 t2 = new DateTime (2002, 2, 1);
\r
402 t1 = DateTime.ParseExact ("2002 February", "Y", null);
\r
403 AssertEquals ("D16", t2.Ticks, t1.Ticks);
\r
406 t2 = new DateTime (DateTime.Now.Year, 1, 25);
\r
407 t1 = DateTime.ParseExact ("25", "%d", null);
\r
408 AssertEquals ("E01: " + t2 + " -- " + t1, t2.Ticks, t1.Ticks);
\r
409 t1 = DateTime.ParseExact ("25", "dd", null);
\r
410 AssertEquals ("E02", t2.Ticks, t1.Ticks);
\r
412 t2 = new DateTime (DateTime.Today.Year, 2, 1);
\r
413 t1 = DateTime.ParseExact ("2", "%M", null);
\r
414 AssertEquals ("E03", t2.Ticks, t1.Ticks);
\r
415 t1 = DateTime.ParseExact ("02", "MM", null);
\r
416 AssertEquals ("E04", t2.Ticks, t1.Ticks);
\r
417 t1 = DateTime.ParseExact ("Feb", "MMM", null);
\r
418 AssertEquals ("E05", t2.Ticks, t1.Ticks);
\r
419 t1 = DateTime.ParseExact ("February", "MMMM", null);
\r
420 AssertEquals ("E06", t2.Ticks, t1.Ticks);
\r
422 t2 = new DateTime (2005, 1, 1);
\r
423 t1 = DateTime.ParseExact ("5", "%y", null);
\r
424 AssertEquals ("E07", t2.Ticks, t1.Ticks);
\r
425 t1 = DateTime.ParseExact ("05", "yy", null);
\r
426 AssertEquals ("E08", t2.Ticks, t1.Ticks);
\r
427 t1 = DateTime.ParseExact ("2005", "yyyy", null);
\r
428 AssertEquals ("E09", t2.Ticks, t1.Ticks);
\r
430 t2 = DateTime.Today + new TimeSpan (5, 0, 0);
\r
431 t1 = DateTime.ParseExact ("5A", "ht", null);
\r
432 AssertEquals ("E10", t2.Ticks, t1.Ticks);
\r
433 t1 = DateTime.ParseExact ("05A", "hht", null);
\r
434 AssertEquals ("E11", t2.Ticks, t1.Ticks);
\r
436 t2 = DateTime.Today + new TimeSpan (15, 0, 0);
\r
437 t1 = DateTime.ParseExact ("3P", "ht", null);
\r
438 AssertEquals ("E12", t2.Ticks, t1.Ticks);
\r
439 t1 = DateTime.ParseExact ("03P", "hht", null);
\r
440 AssertEquals ("E13", t2.Ticks, t1.Ticks);
\r
442 t2 = DateTime.Today + new TimeSpan (5, 0, 0);
\r
443 t1 = DateTime.ParseExact ("5", "%H", null);
\r
444 AssertEquals ("E14", t2.Ticks, t1.Ticks);
\r
446 t2 = DateTime.Today + new TimeSpan (15, 0, 0);
\r
447 t1 = DateTime.ParseExact ("15", "%H", null);
\r
448 AssertEquals ("E15", t2.Ticks, t1.Ticks);
\r
449 t1 = DateTime.ParseExact ("15", "HH", null);
\r
450 AssertEquals ("E16", t2.Ticks, t1.Ticks);
\r
453 t2 = DateTime.Today + new TimeSpan (17, 18, 0);
\r
454 t1 = DateTime.ParseExact ("11:18AM -5", "h:mmtt z", null);
\r
455 t1 = TimeZone.CurrentTimeZone.ToUniversalTime(t1);
\r
456 if (!TimeZone.CurrentTimeZone.IsDaylightSavingTime(t1))
\r
457 t1 += new TimeSpan(1, 0, 0);
\r
458 AssertEquals ("F01", t2.Ticks, t1.Ticks);
\r
460 t1 = DateTime.ParseExact ("11:18AM -05:00", "h:mmtt zzz", null);
\r
461 t1 = TimeZone.CurrentTimeZone.ToUniversalTime(t1);
\r
462 if (!TimeZone.CurrentTimeZone.IsDaylightSavingTime(t1))
\r
463 t1 += new TimeSpan(1, 0, 0);
\r
464 AssertEquals ("F02", t2.Ticks, t1.Ticks);
\r
466 t1 = DateTime.ParseExact ("7:18PM +03", "h:mmtt zz", null);
\r
467 t1 = TimeZone.CurrentTimeZone.ToUniversalTime(t1);
\r
468 if (!TimeZone.CurrentTimeZone.IsDaylightSavingTime(t1))
\r
469 t1 += new TimeSpan(1, 0, 0);
\r
470 AssertEquals ("F03", t2.Ticks, t1.Ticks);
\r
472 t1 = DateTime.ParseExact ("7:48PM +03:30", "h:mmtt zzz", null);
\r
473 t1 = TimeZone.CurrentTimeZone.ToUniversalTime(t1);
\r
474 if (!TimeZone.CurrentTimeZone.IsDaylightSavingTime(t1))
\r
475 t1 += new TimeSpan(1, 0, 0);
\r
476 AssertEquals ("F04", t2.Ticks, t1.Ticks);
\r
479 t2 = DateTime.Today + new TimeSpan (16, 18, 0);
\r
480 t1 = DateTime.ParseExact ("11:18AM -5", "h:mmtt z",
\r
481 null, DateTimeStyles.AdjustToUniversal);
\r
482 AssertEquals ("G01", t2.Ticks, t1.Ticks);
\r
484 t1 = DateTime.ParseExact ("Monday, 25 February 2002 05:25:13", "F",
\r
485 null, DateTimeStyles.AdjustToUniversal);
\r
486 AssertEquals ("G02", myTicks[4], t1.Ticks);
\r
487 t1 = DateTime.ParseExact ("Monday, 25 February 2002 05:25:13",
\r
488 "dddd, dd MMMM yyyy HH:mm:ss",
\r
489 null, DateTimeStyles.AdjustToUniversal);
\r
490 AssertEquals ("G03", myTicks[4], t1.Ticks);
\r
492 t1 = DateTime.ParseExact ("02/25/2002", "d", null,
\r
493 DateTimeStyles.AllowWhiteSpaces);
\r
494 AssertEquals ("G04", myTicks[0], t1.Ticks);
\r
496 t1 = DateTime.ParseExact (" 02/25/2002", "d", null,
\r
497 DateTimeStyles.AllowLeadingWhite);
\r
498 AssertEquals ("G05", myTicks[0], t1.Ticks);
\r
500 t1 = DateTime.ParseExact ("02/25/2002 ", "d", null,
\r
501 DateTimeStyles.AllowTrailingWhite);
\r
502 AssertEquals ("G06", myTicks[0], t1.Ticks);
\r
504 t1 = DateTime.ParseExact (" 02 / 25 / 2002 ", "d", null,
\r
505 DateTimeStyles.AllowWhiteSpaces);
\r
506 AssertEquals ("G07", myTicks[0], t1.Ticks);
\r
508 // Multi Custom Patterns
\r
509 string rfc1123_date = "r";
\r
510 string rfc850_date = "dddd, dd'-'MMM'-'yy HH':'mm':'ss 'GMT'";
\r
511 string asctime_date = "ddd MMM d HH':'mm':'ss yyyy";
\r
512 string [] formats = new string [] {rfc1123_date, rfc850_date, asctime_date};
\r
513 CultureInfo enUS = new CultureInfo("en-US", false);
\r
514 t1 = DateTime.ParseExact ("Sun, 06 Nov 1994 08:49:37 GMT", formats[0], enUS,
\r
515 DateTimeStyles.AllowWhiteSpaces);
\r
516 AssertEquals ("M01", myTicks[6], t1.Ticks);
\r
517 t1 = DateTime.ParseExact ("Sunday, 06-Nov-94 08:49:37 GMT", formats[1], enUS,
\r
518 DateTimeStyles.AllowWhiteSpaces);
\r
519 AssertEquals ("M02", myTicks[6], t1.Ticks);
\r
520 t1 = DateTime.ParseExact ("Sun Nov 6 08:49:37 1994", formats[2], enUS,
\r
521 DateTimeStyles.AllowWhiteSpaces);
\r
522 AssertEquals ("M03", myTicks[6], t1.Ticks);
\r
523 t1 = DateTime.ParseExact ("Sun, 06 Nov 1994 08:49:37 GMT", formats, enUS,
\r
524 DateTimeStyles.AllowWhiteSpaces);
\r
525 AssertEquals ("M04", myTicks[6], t1.Ticks);
\r
526 t1 = DateTime.ParseExact ("Sunday, 06-Nov-94 08:49:37 GMT", formats, enUS,
\r
527 DateTimeStyles.AllowWhiteSpaces);
\r
528 AssertEquals ("M05", myTicks[6], t1.Ticks);
\r
529 t1 = DateTime.ParseExact ("Sun Nov 6 08:49:37 1994", formats, enUS,
\r
530 DateTimeStyles.AllowWhiteSpaces);
\r
531 AssertEquals ("M06", myTicks[6], t1.Ticks);
\r
534 [Ignore ("need to fix tests that run on different timezones")]
\r
535 public void TestParse2 ()
\r
537 DateTime t1 = DateTime.Parse ("Mon, 25 Feb 2002 04:25:13 GMT");
\r
538 t1 = TimeZone.CurrentTimeZone.ToUniversalTime(t1);
\r
539 AssertEquals ("H10d", 04 - TimeZone.CurrentTimeZone.GetUtcOffset(t1).Hours, t1.Hour);
\r
543 public void TestParse ()
\r
545 // Standard patterns
\r
546 DateTime t1 = DateTime.Parse ("02/25/2002");
\r
547 AssertEquals ("H00", myTicks[0], t1.Ticks);
\r
549 t1 = DateTime.Parse ("2002-02-25");
\r
551 catch (Exception e) {
\r
552 Fail ("Unexpected exception. e=" + e);
\r
554 AssertEquals ("H01", myTicks[0], t1.Ticks);
\r
555 t1 = DateTime.Parse ("Monday, 25 February 2002");
\r
556 AssertEquals ("H02", myTicks[0], t1.Ticks);
\r
557 t1 = DateTime.Parse ("Monday, 25 February 2002 05:25");
\r
558 AssertEquals ("H03", myTicks[3], t1.Ticks);
\r
559 t1 = DateTime.Parse ("Monday, 25 February 2002 05:25:13");
\r
560 AssertEquals ("H04", myTicks[4], t1.Ticks);
\r
561 t1 = DateTime.Parse ("02/25/2002 05:25");
\r
562 AssertEquals ("H05", myTicks[3], t1.Ticks);
\r
563 t1 = DateTime.Parse ("02/25/2002 05:25:13");
\r
564 AssertEquals ("H06", myTicks[4], t1.Ticks);
\r
565 t1 = DateTime.Parse ("2002-02-25 04:25:13Z");
\r
566 t1 = TimeZone.CurrentTimeZone.ToUniversalTime(t1);
\r
567 AssertEquals ("H07a", 2002, t1.Year);
\r
568 AssertEquals ("H07b", 02, t1.Month);
\r
569 AssertEquals ("H07c", 25, t1.Day);
\r
570 AssertEquals ("H07d", 04, t1.Hour);
\r
571 AssertEquals ("H07e", 25, t1.Minute);
\r
572 AssertEquals ("H07f", 13, t1.Second);
\r
574 DateTime t2 = new DateTime (DateTime.Today.Year, 2, 25);
\r
575 t1 = DateTime.Parse ("February 25");
\r
576 AssertEquals ("H08", t2.Ticks, t1.Ticks);
\r
578 t2 = new DateTime (DateTime.Today.Year, 2, 8);
\r
579 t1 = DateTime.Parse ("February 08");
\r
580 AssertEquals ("H09", t2.Ticks, t1.Ticks);
\r
582 t1 = DateTime.Parse ("Mon, 25 Feb 2002 04:25:13 GMT");
\r
583 t1 = TimeZone.CurrentTimeZone.ToUniversalTime(t1);
\r
584 AssertEquals ("H10a", 2002, t1.Year);
\r
585 AssertEquals ("H10b", 02, t1.Month);
\r
586 AssertEquals ("H10c", 25, t1.Day);
\r
587 AssertEquals ("H10e", 25, t1.Minute);
\r
588 AssertEquals ("H10f", 13, t1.Second);
\r
590 t1 = DateTime.Parse ("2002-02-25T05:25:13");
\r
591 AssertEquals ("H11", myTicks[4], t1.Ticks);
\r
593 t2 = DateTime.Today + new TimeSpan (5,25,0);
\r
594 t1 = DateTime.Parse ("05:25");
\r
595 AssertEquals("H12", t2.Ticks, t1.Ticks);
\r
597 t2 = DateTime.Today + new TimeSpan (5,25,13);
\r
598 t1 = DateTime.Parse ("05:25:13");
\r
599 AssertEquals("H13", t2.Ticks, t1.Ticks);
\r
601 t2 = new DateTime (2002, 2, 1);
\r
602 t1 = DateTime.Parse ("2002 February");
\r
603 AssertEquals ("H14", t2.Ticks, t1.Ticks);
\r
605 t2 = new DateTime (2002, 2, 1);
\r
606 t1 = DateTime.Parse ("2002 February");
\r
607 AssertEquals ("H15", t2.Ticks, t1.Ticks);
\r
609 t2 = new DateTime (DateTime.Today.Year, 2, 8);
\r
610 t1 = DateTime.Parse ("February 8");
\r
611 AssertEquals ("H16", t2.Ticks, t1.Ticks);
\r
614 public void TestOA ()
\r
616 double number=5000.41443;
\r
617 DateTime d = DateTime.FromOADate(number);
\r
618 DTAssertEquals ("I01", d, new DateTime(1913, 9, 8, 9, 56, 46, 0), Resolution.Second);
\r
619 AssertEquals ("I02", d.ToOADate(), number);
\r