2003-11-14 Nick Drochak <ndrochak@gol.com>
[mono.git] / mcs / class / corlib / Test / System / DateTimeTest.cs
1 //\r
2 // DateTimeTest.cs - NUnit Test Cases for the System.DateTime struct\r
3 //\r
4 // author:\r
5 //   Martin Baulig (martin@gnome.org)\r
6 //\r
7 //   (C) 2002 Free Software Foundation\r
8 //\r
9 \r
10 using NUnit.Framework;\r
11 using System;\r
12 using System.Threading;\r
13 using System.Globalization;\r
14 \r
15 namespace MonoTests.System\r
16 {\r
17 \r
18 [TestFixture]\r
19 public class DateTimeTest : Assertion\r
20 {\r
21         [Flags]\r
22         internal enum Resolution : ushort {\r
23                 Year = 64,\r
24                 Month = 96,\r
25                 Day = 112,\r
26                 Hour = 120,\r
27                 Minute = 124,\r
28                 Second = 126,\r
29                 Millisecond = 127,\r
30                 _Month = 32,\r
31                 _Day = 16,\r
32                 _Hour = 8,\r
33                 _Minute = 4,\r
34                 _Second = 2,\r
35                 _Millisecond = 1\r
36         }\r
37                 \r
38         internal void DTAssertEquals (DateTime actual, DateTime expected, Resolution resolution) {\r
39                 DTAssertEquals ("", actual, expected, resolution);\r
40         }\r
41 \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
57         }\r
58 \r
59         private CultureInfo oldcult;\r
60         \r
61         long[] myTicks = {\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
69         };\r
70 \r
71         public DateTimeTest() {}\r
72 \r
73         [SetUp]\r
74         public void SetUp() \r
75         {\r
76                 // the current culture determines the result of formatting\r
77                 oldcult = Thread.CurrentThread.CurrentCulture;\r
78                 Thread.CurrentThread.CurrentCulture = new CultureInfo ("");\r
79         }\r
80         \r
81         [TearDown]\r
82         public void TearDown ()\r
83         {\r
84                 Thread.CurrentThread.CurrentCulture = oldcult;          \r
85         }\r
86         \r
87         public void TestCtors ()\r
88         {\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
103         }\r
104         \r
105         [Test]\r
106         public void Fields ()\r
107         {\r
108                 AssertEquals ("J01", 3155378975999999999L, DateTime.MaxValue.Ticks);                                    \r
109                 AssertEquals ("J02", 0, DateTime.MinValue.Ticks);\r
110         }\r
111         \r
112         [Test]\r
113         public void Add ()\r
114         {\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
118                 \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
123                 \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
128         }\r
129         \r
130         [Test]\r
131         [ExpectedException(typeof (ArgumentOutOfRangeException))]\r
132         public void AddOutOfRangeException1 ()\r
133         {\r
134                 DateTime t1 = new DateTime (myTicks [1]);\r
135                 t1.Add (TimeSpan.MaxValue);\r
136         }\r
137 \r
138         [Test]\r
139         [ExpectedException(typeof (ArgumentOutOfRangeException))]\r
140         public void AddOutOfRangeException2 ()\r
141         {\r
142                 DateTime t1 = new DateTime (myTicks [1]);\r
143                 t1.Add (TimeSpan.MinValue);\r
144         }\r
145         \r
146         [Test]\r
147         public void AddDays ()\r
148         {\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
155                 \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
161 \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
167         }\r
168         \r
169         [Test]\r
170         [ExpectedException(typeof (ArgumentOutOfRangeException))]\r
171         public void AddDaysOutOfRangeException1 ()\r
172         {\r
173                 DateTime t1 = new DateTime (myTicks [1]);\r
174                 t1.AddDays (10000000);\r
175         }\r
176 \r
177         [Test]\r
178         [ExpectedException(typeof (ArgumentOutOfRangeException))]\r
179         public void AddDaysOutOfRangeException2 ()\r
180         {\r
181                 DateTime t1 = new DateTime (myTicks [1]);\r
182                 t1.AddDays (-10000000);\r
183         }\r
184 \r
185         [Test]\r
186         public void AddHours ()\r
187         {\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
194                 \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
200 \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
206         }\r
207         \r
208         [Test]\r
209         [ExpectedException (typeof (ArgumentOutOfRangeException))]\r
210         public void AddHoursOutOfRangeException1 ()\r
211         {\r
212                 DateTime t1 = new DateTime (myTicks [1]);\r
213                 t1.AddHours (9E100);\r
214         }\r
215 \r
216         [Test]\r
217         [ExpectedException (typeof (ArgumentOutOfRangeException))]\r
218         public void AddHoursOutOfRangeException2 ()\r
219         {\r
220                 DateTime t1 = new DateTime (myTicks [1]);\r
221                 t1.AddHours (-9E100);\r
222         }\r
223                                                   \r
224         [Test]\r
225         public void AddMilliseconds ()\r
226         {\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
233                 \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
239 \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
245         }\r
246 \r
247         [Test]\r
248         [ExpectedException (typeof (ArgumentOutOfRangeException))]\r
249         public void AddMillisecondsOutOfRangeException1 ()\r
250         {\r
251                 DateTime t1 = new DateTime (myTicks [1]);\r
252                 t1.AddMilliseconds (9E100);\r
253         }\r
254 \r
255         [Test]\r
256         [ExpectedException (typeof (ArgumentOutOfRangeException))]\r
257         public void AddMillisecondsOutOfRangeException2 ()\r
258         {\r
259                 DateTime t1 = new DateTime (myTicks [1]);\r
260                 t1.AddMilliseconds (-9E100);\r
261         }\r
262 \r
263 \r
264         public void TestToString ()\r
265         {\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
286 \r
287                 // Custom patterns\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
321         }\r
322 \r
323         [Ignore ("need a better way to handle these tests with them running on different timezones")]\r
324         public void TestParseExact2 () \r
325         {\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
329 \r
330         }\r
331 \r
332         public void TestParseExact ()\r
333         {\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
361 \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
365 \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
369 \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
377 \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
385 \r
386                 t1 = DateTime.ParseExact ("2002-02-25T05:25:13", "s", null);\r
387                 AssertEquals ("D13", myTicks[4], t1.Ticks);\r
388 \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
392 \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
396 \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
400 \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
404 \r
405                 // Custom patterns\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
411 \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
421 \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
429 \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
435 \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
441 \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
445 \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
451 \r
452                 // Time zones\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
459 \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
465 \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
471 \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
477 \r
478                 // Options\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
483 \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
491 \r
492                 t1 = DateTime.ParseExact ("02/25/2002", "d", null,\r
493                                           DateTimeStyles.AllowWhiteSpaces);\r
494                 AssertEquals ("G04", myTicks[0], t1.Ticks);\r
495 \r
496                 t1 = DateTime.ParseExact ("    02/25/2002", "d", null,\r
497                                           DateTimeStyles.AllowLeadingWhite);\r
498                 AssertEquals ("G05", myTicks[0], t1.Ticks);\r
499 \r
500                 t1 = DateTime.ParseExact ("02/25/2002    ", "d", null,\r
501                                           DateTimeStyles.AllowTrailingWhite);\r
502                 AssertEquals ("G06", myTicks[0], t1.Ticks);\r
503 \r
504                 t1 = DateTime.ParseExact ("  02 / 25 / 2002    ", "d", null,\r
505                                           DateTimeStyles.AllowWhiteSpaces);\r
506                 AssertEquals ("G07", myTicks[0], t1.Ticks);\r
507 \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
532         }\r
533 \r
534         [Ignore ("need to fix tests that run on different timezones")]\r
535         public void TestParse2 ()\r
536         {\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
540 \r
541         }\r
542         \r
543         public void TestParse ()\r
544         {\r
545                 // Standard patterns\r
546                 DateTime t1 = DateTime.Parse ("02/25/2002");\r
547                 AssertEquals ("H00", myTicks[0], t1.Ticks);\r
548                 try {\r
549                         t1 = DateTime.Parse ("2002-02-25");\r
550                 }\r
551                 catch (Exception e) {\r
552                         Fail ("Unexpected exception. e=" + e);\r
553                 }\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
573 \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
577 \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
581 \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
589 \r
590                 t1 = DateTime.Parse ("2002-02-25T05:25:13");\r
591                 AssertEquals ("H11", myTicks[4], t1.Ticks);\r
592 \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
596 \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
600 \r
601                 t2 = new DateTime (2002, 2, 1);\r
602                 t1 = DateTime.Parse ("2002 February");\r
603                 AssertEquals ("H14", t2.Ticks, t1.Ticks);\r
604 \r
605                 t2 = new DateTime (2002, 2, 1);\r
606                 t1 = DateTime.Parse ("2002 February");\r
607                 AssertEquals ("H15", t2.Ticks, t1.Ticks);\r
608 \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
612         }\r
613 \r
614         public void TestOA ()\r
615         {\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
620         }\r
621 }\r
622 \r
623 }\r