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