1#!/usr/bin/perl
2
3use warnings;
4use strict;
5use Test::Inter;
6$::ti = new Test::Inter $0;
7require "tests-dm5.pl";
8
9Date_Init("TZ=EST");
10Date_Init("ForceDate=1997-03-08-12:30:00");
11
12my($currS,$currMN,$currH,$currD,$currM,$currY)=("00","30","12","08","03","1997");
13
14my $today         ="$currY$currM$currD$currH:$currMN:$currS";
15my $todaydate     ="$currY$currM$currD";
16my $yesterdaydate ="$currY$currM". $currD-1;
17my $tomorrowdate  ="$currY$currM". $currD+1;
18my $overmorrowdate="$currY$currM". $currD+2;
19my $yesterday     ="$yesterdaydate$currH:$currMN:$currS";
20my $tomorrow      ="$tomorrowdate$currH:$currMN:$currS";
21my $overmorrow    ="$overmorrowdate$currH:$currMN:$currS";
22
23my $tests="
24
25now => $today
26
27today => $today
28
29yesterday => $yesterday
30
31tomorrow => $tomorrow
32
33overmorrow => $overmorrow
34
35'today at 4:00' => ${todaydate}04:00:00
36
37'today at 4:00 pm' => ${todaydate}16:00:00
38
39'today at 16:00:00:05' => ${todaydate}16:00:00
40
41'today at 12:00 am' => ${todaydate}00:00:00
42
43'today at 12:00 GMT' => ${todaydate}07:00:00
44
45'today at 4:00 PST' => ${todaydate}07:00:00
46
47'today at 4:00 -0800' => ${todaydate}07:00:00
48
49'today at noon' => ${todaydate}12:00:00
50
51'tomorrow at noon' => ${tomorrowdate}12:00:00
52
53'1 month ago' => 1997020812:30:00
54
55# Test weeks
56
57'22nd sunday' => 1997060100:00:00
58
5997W227 => 1997060100:00:00
60
611997W22-7 => 1997060100:00:00
62
631997W23 => 1997060200:00:00
64
651997023 => 1997012300:00:00
66
671997035 => 1997020400:00:00
68
6997-035 => 1997020400:00:00
70
7197035 => 1997020400:00:00
72
73'twenty-second sunday 1996' => 1996060200:00:00
74
75'22 sunday in 1996' => 1996060200:00:00
76
77'22nd sunday 12:00' => 1997060112:00:00
78
79'22nd sunday at 12:00' => 1997060112:00:00
80
81'22nd sunday at 12:00 EST' => 1997060112:00:00
82
83'22nd sunday in 1996 at 12:00 EST' => 1996060212:00:00
84
85'sunday week 1 1999' => 1999011000:00:00
86
87'thursday week 0 1999' => 1998123100:00:00
88
89'1st thursday in 1999' => 1999010700:00:00
90
91'1st sunday in 1999' => 1999010300:00:00
92
93'1st saturday in 2005' => 2005010100:00:00
94
95'sunday wk 22' => 1997060100:00:00
96
97'sunday week twenty-second 1996' => 1996060200:00:00
98
99'sunday w 22 in 1996' => 1996060200:00:00
100
101'sunday wks 22 12:00' => 1997060112:00:00
102
103'sunday week 22 at 12:00' => 1997060112:00:00
104
105'sunday week 22 at 12:00 EST' => 1997060112:00:00
106
107'sunday week 22 in 1996 at 12:00 EST' => 1996060212:00:00
108
109'sunday 22 wk' => 1997060100:00:00
110
111'sunday twenty-second week 1996' => 1996060200:00:00
112
113'sunday 22 w in 1996' => 1996060200:00:00
114
115'sunday 22 wks 12:00' => 1997060112:00:00
116
117'sunday 22 week at 12:00' => 1997060112:00:00
118
119'sunday 22 week at 12:00 EST' => 1997060112:00:00
120
121'sunday 22 week in 1996 at 12:00 EST' => 1996060212:00:00
122
123# Tests 'which day in mon' formats
124
125'last tue in Jun 96' => 1996062500:00:00
126
127'last tueSday of June' => 1997062400:00:00
128
129'first tue in Jun 1996' => 1996060400:00:00
130
131'1st tue in June' => 1997060300:00:00
132
133'3rd tuesday in Jun 96' => 1996061800:00:00
134
135'3rd tuesday in Jun 96 at 12:00:00.05' => 1996061812:00:00
136
137'3rd tuesday in Jun 96 at 10:30am' => 1996061810:30:00
138
139'3rd tuesday in Jun 96 at 10:30 pm' => 1996061822:30:00
140
141'3rd tuesday in Jun 96 at 10:30 pm GMT' => 1996061817:30:00
142
143'3rd tuesday in Jun 96 at 10:30 pm CET' => 1996061816:30:00
144
145# Tests YYMMDD time
146
1471996061800:00:00 => 1996061800:00:00
148
1491996061800:00 => 1996061800:00:00
150
15196-06-1800:00:00 => 1996061800:00:00
152
15396-06-1800:00 => 1996061800:00:00
154
15593-12-01 => 1993120100:00:00
156
15719931201 => 1993120100:00:00
158
15993-12-0105:30 => 1993120105:30:00
160
1611993120105:30 => 1993120105:30:00
162
1631992022905:30 => 1992022905:30:00
164
1651990022905:30 => ''
166
1671993120105:30:25 => 1993120105:30:25
168
1691992022905:30:61 => ''
170
171'1993120105:30:25.05 am' => 1993120105:30:25
172
173'1993120105:30:25:05 pM' => 1993120117:30:25
174
175'1993120105:30:25 pM GMT' => 1993120112:30:25
176
177'19931201 at 05:30:25 pM GMT' => 1993120112:30:25
178
179'19931201at05:30:25 pM GMT' => 1993120112:30:25
180
181'1993120117:30:25 GMT' => 1993120112:30:25
182
183# Tests YYMMDDHHMNSS
184
18519960618000000 => 1996061800:00:00
186
187# Tests Date Time
188#       Date%Time
189# Date=mm%dd
190
19112/10/1965 => 1965121000:00:00
192
19312/10/65 => 1965121000:00:00
194
19512.10.65 => 1965121000:00:00
196
197'12 10 65' => 1965121000:00:00
198
199'12/10/65 5:30:25' => 1965121005:30:25
200
201'12/10/65/5:30 pm' => 1965121017:30:00
202
203'12/10/65/5:30 pm GMT' => 1965121012:30:00
204
205'12/10/65 at 5:30:25' => 1965121005:30:25
206
207'12-10-1965 5:30:25' => 1965121005:30:25
208
209'12-10-65 5:30:25' => 1965121005:30:25
210
211'12-10-65-5:30 pm' => 1965121017:30:00
212
213'12-10-65 at 5:30:25' => 1965121005:30:25
214
215'12 10 65 5:30:25' => 1965121005:30:25
216
217'12 10 65 5:30 pm' => 1965121017:30:00
218
219'12 10 65 at 5:30:25' => 1965121005:30:25
220
221'12 10 1965 at 5:30:25' => 1965121005:30:25
222
223'12.10.1965 05:61' => ''
224
225'12.10.1965 05:30:61' => ''
226
22712/10 => ${currY}121000:00:00
228
229'12/10 05:30' => ${currY}121005:30:00
230
231'12/10 at 05:30:25' => ${currY}121005:30:25
232
233'12/10 at 05:30:25 GMT' => ${currY}121000:30:25
234
235'12/10 5:30' => ${currY}121005:30:00
236
237'12/10 05:30' => ${currY}121005:30:00
238
239'12-10 5:30' => ${currY}121005:30:00
240
241'12.10 05:30' => ${currY}121005:30:00
242
243'12 10 05:30' => ${currY}121005:30:00
244
245'2 29 92' => 1992022900:00:00
246
247'2 29 90' => ''
248
249# Tests Date Time
250#       Date%Time
251# Date=mmm%dd
252
253Dec/10/1965 => 1965121000:00:00
254
255December/10/65 => 1965121000:00:00
256
257Dec-10-65 => 1965121000:00:00
258
259'Dec 10 65' => 1965121000:00:00
260
261'DecEMBER10 65' => 1965121000:00:00
262
263'December/10/65 5:30:25' => 1965121005:30:25
264
265'Dec/10/65/5:30 pm' => 1965121017:30:00
266
267'Dec/10/65/5:30 pm GMT' => 1965121012:30:00
268
269'Dec/10/65 at 5:30:25' => 1965121005:30:25
270
271'Dec-10-1965 5:30:25' => 1965121005:30:25
272
273'December-10-65 5:30:25' => 1965121005:30:25
274
275'Dec-10-65-5:30 pm' => 1965121017:30:00
276
277'Dec-10-65 at 5:30:25' => 1965121005:30:25
278
279'Dec 10 65 5:30:25' => 1965121005:30:25
280
281'Dec 10 65 5:30 pm' => 1965121017:30:00
282
283'December 10 65 at 5:30:25' => 1965121005:30:25
284
285'Dec 10 1965 at 5:30:25' => 1965121005:30:25
286
287'Dec-10-1965 05:61' => ''
288
289'Dec-10-1965 05:30:61' => ''
290
291December/10 => ${currY}121000:00:00
292
293'Dec/10 05:30' => ${currY}121005:30:00
294
295'Dec/10 at 05:30:25' => ${currY}121005:30:25
296
297'Dec/10 at 05:30:25 GMT' => ${currY}121000:30:25
298
299'Dec/10 5:30' => ${currY}121005:30:00
300
301'Dec/10 05:30' => ${currY}121005:30:00
302
303'Dec-10 5:30' => ${currY}121005:30:00
304
305'Dec-10 05:30' => ${currY}121005:30:00
306
307'December10 05:30' => ${currY}121005:30:00
308
309'DeC first 1965' => 1965120100:00:00
310
311# Tests Date Time
312#       Date%Time
313# Date=dd%mmm
314
31510/Dec/1965 => 1965121000:00:00
316
31710/December/65 => 1965121000:00:00
318
31910-Dec-65 => 1965121000:00:00
320
321'10 Dec 65' => 1965121000:00:00
322
323'10/December/65 5:30:25' => 1965121005:30:25
324
325'10/Dec/65/5:30 pm' => 1965121017:30:00
326
327'10/Dec/65/5:30 pm GMT' => 1965121012:30:00
328
329'10/Dec/65 at 5:30:25' => 1965121005:30:25
330
331'10-Dec-1965 5:30:25' => 1965121005:30:25
332
333'10-December-65 5:30:25' => 1965121005:30:25
334
335'10-Dec-65-5:30 pm' => 1965121017:30:00
336
337'10-Dec-65 at 5:30:25' => 1965121005:30:25
338
339'10 Dec 65 5:30:25' => 1965121005:30:25
340
341'10 Dec 65 5:30 pm' => 1965121017:30:00
342
343'10December 65 at 5:30:25' => 1965121005:30:25
344
345'10 Dec 1965 at 5:30:25' => 1965121005:30:25
346
347'10Dec 1965 at 5:30:25' => 1965121005:30:25
348
349'10 Dec1965 at 5:30:25' => 1965121005:30:25
350
351'10Dec1965 at 5:30:25' => 1965121005:30:25
352
353'10-Dec-1965 05:61' => ''
354
355'10-Dec-1965 05:30:61' => ''
356
35710/December => ${currY}121000:00:00
358
359'10/Dec 05:30' => ${currY}121005:30:00
360
361'10/Dec at 05:30:25' => ${currY}121005:30:25
362
363'10-Dec at 05:30:25 GMT' => ${currY}121000:30:25
364
365'10-Dec 5:30' => ${currY}121005:30:00
366
367'10/Dec 05:30' => ${currY}121005:30:00
368
369'10December 05:30' => ${currY}121005:30:00
370
371'1st DeC 65' => 1965120100:00:00
372
373# Tests time only formats
374
3755:30 => ${todaydate}05:30:00
376
3775:30:02 => ${todaydate}05:30:02
378
37915:30:00 => ${todaydate}15:30:00
380
381# Tests TimeDate
382#       Time%Date
383
384'5:30 pm 12/10/65' => 1965121017:30:00
385
386'5:30 pm GMT 12/10/65' => 1965121012:30:00
387
3885:30:25/12/10/65 => 1965121005:30:25
389
3905:30:25.05/12/10/65 => 1965121005:30:25
391
3925:30:25:05/12/10/65 => 1965121005:30:25
393
394'5:30:25 12-10-1965' => 1965121005:30:25
395
396'5:30:25 12-10-65' => 1965121005:30:25
397
398'5:30 pm 12-10-65' => 1965121017:30:00
399
4005:30:25/12-10-65 => 1965121005:30:25
401
402'5:30:25 12 10 65' => 1965121005:30:25
403
404'5:30 pm 12 10 65' => 1965121017:30:00
405
406'5:30 pm GMT 12 10 65' => 1965121012:30:00
407
408'5:30:25 12 10 1965' => 1965121005:30:25
409
410'05:61 12-10-1965' => ''
411
412'05:30:61 12-10-1965' => ''
413
414'05:30 12/10' => ${currY}121005:30:00
415
41605:30/12/10 => ${currY}121005:30:00
417
418'05:30:25 12/10' => ${currY}121005:30:25
419
42005:30:25/12-10 => ${currY}121005:30:25
421
422'05:30:25 GMT 12/10' => ${currY}121000:30:25
423
424'5:30 12/10' => ${currY}121005:30:00
425
426'05:30 12/10' => ${currY}121005:30:00
427
428'5:30 12-10' => ${currY}121005:30:00
429
430'05:30 12-10' => ${currY}121005:30:00
431
432'05:30 12 10' => ${currY}121005:30:00
433
434# Tests TimeDate
435#       Time%Date
436# Date=mmm%dd, dd%mmm
437
438'4:50 DeC 10' => ${currY}121004:50:00
439
440'4:50 DeCember 10' => ${currY}121004:50:00
441
442'4:50:40 DeC 10' => ${currY}121004:50:40
443
444'4:50:42 DeCember 10' => ${currY}121004:50:42
445
446'4:50 10 DeC' => ${currY}121004:50:00
447
448'4:50 10 DeCember' => ${currY}121004:50:00
449
450'4:50 10DeC' => ${currY}121004:50:00
451
452'4:50 10DeCember' => ${currY}121004:50:00
453
454'4:50:51 10 DeC' => ${currY}121004:50:51
455
456'4:50:52 10 DeCember' => ${currY}121004:50:52
457
458'4:50:53 10DeC' => ${currY}121004:50:53
459
460'4:50:54 10DeCember' => ${currY}121004:50:54
461
4624:50:54DeCember10 => ${currY}121004:50:54
463
4644:50:54DeCember10/65 => 1965121004:50:54
465
4664:50:54DeCember1965 => 1965120104:50:54
467
468'Sept 1995' => 1995090100:00:00
469
470'1995 september' => 1995090100:00:00
471
472'5:30 DeC 1' => ${currY}120105:30:00
473
474'05:30 DeC 10' => ${currY}121005:30:00
475
476'05:30:11 DeC 10' => ${currY}121005:30:11
477
478'5:30 DeCember 1' => ${currY}120105:30:00
479
480'05:30 DeCember 10' => ${currY}121005:30:00
481
482'05:30:12 DeCember 10' => ${currY}121005:30:12
483
484# Test ctime formats
485
486'DeCember 10 05:30:12 1996' => 1996121005:30:12
487
488'DeC10 05:30:12 96' => 1996121005:30:12
489
490# Test some tricky timezone conversions
491
492'Feb 28 1997 23:00-0900' => 1997030103:00:00
493
494'Feb 27 1997 23:00-0900' => 1997022803:00:00
495
496'Feb 01 1997 01:00-0100' => 1997013121:00:00
497
498'Feb 02 1997 01:00-0100' => 1997020121:00:00
499
500'Feb 02 1997 01:00+0100' => 1997020119:00:00
501
502'Feb 02 1997 01:00+01' => 1997020119:00:00
503
504'Feb 02 1997 01:00+01:00' => 1997020119:00:00
505
50619970202010000+0100 => 1997020119:00:00
507
508# More tests...
509
510'last day in October 1997' => 1997103100:00:00
511
512'epoch 400000' => 1970010510:06:40
513
514'19980102030405 EST' => 1998010203:04:05
515
51619980102030405E => 1998010203:04:05
517
518'Mon, 19 Jan 1998 08:11:34 +1030' => 1998011816:41:34
519
520'Tue, 26 May 1998 13:23:15 -0500 (EST)' => 1998052613:23:15
521
522'Tue, 26 May 1998 13:23:15 -0500 (EST Blah)' => 1998052613:23:15
523
524Dec101965 => 1965121000:00:00
525
52610Dec1965 => 1965121000:00:00
527
528101965Dec => 1965121000:00:00
529
530'10/dec/1965:12:00:00 EST' => 1965121012:00:00
531
532'2000-02-16 24:00' => 2000021700:00:00
533
534'2000-02-16 15:24:00' => 2000021615:24:00
535
5362000-02-16T12:30:30 => 2000021612:30:30
537
5382000-02-16T12:30 => 2000021612:30:00
539
54099-02-16T12:30 => 1999021612:30:00
541
542'20021216090000 -0500' => 2002121609:00:00
543
5442004-03-29T11:41:00Z => 2004032906:41:00
545
5462005-159T15:52:59 => 2005060815:52:59
547";
548
549$::ti->tests(func  => \&ParseDateString,
550             tests => $tests);
551$::ti->done_testing();
552
553#Local Variables:
554#mode: cperl
555#indent-tabs-mode: nil
556#cperl-indent-level: 3
557#cperl-continued-statement-offset: 2
558#cperl-continued-brace-offset: 0
559#cperl-brace-offset: 0
560#cperl-brace-imaginary-offset: 0
561#cperl-label-offset: 0
562#End:
563