1#!/usr/bin/perl
2
3# taken from TimeDate-1.16/t/getdate.t
4use strict;
5use warnings;
6
7use lib qw( ./lib );
8
9use Test::More;
10
11use DateTime;
12use DateTime::Duration;
13use DateTime::Format::DateParse;
14
15my $data = qq!1995-01-24                ;790905600
161995-06-24                           ;803952000
1792/01/02 12:01               ;694353660
1892/01/02 12:01 AM            ;694310460
1992/01/02 12:01 PM            ;694353660
202002-11-02 11pm GMT          ;1036278000
212002-11-02 11 pm GMT             ;1036278000
221995-01-24  GMT                      ;790905600
231995-01-24  BST                      ;790902000
241995-06-24  GMT                      ;803952000
251995-06-24  BST                      ;803948400
261992-1-2 12:01 GMT           ;694353660
27Wed, 16 Jun 94 07:29:35 CST          ;771773375
28Wed,16 Jun 94 07:29:35 CST           ;771773375
29Wed, 16 Nov 94 07:29:35 CST          ;784992575
30Mon, 21 Nov 94 07:42:23 CST          ;785425343
31Mon, 21 Nov 94 04:28:18 CST          ;785413698
32Tue, 15 Nov 94 09:15:10 GMT          ;784890910
33Wed, 16 Nov 94 09:39:49 GMT          ;784978789
34Wed, 16 Nov 94 09:23:17 GMT          ;784977797
35Wed, 16 Nov 94 12:39:49 GMT          ;784989589
36Wed, 16 Nov 94 14:03:06 GMT          ;784994586
37Wed, 16 Nov 94 05:30:51 CST          ;784985451
38Thu, 17 Nov 94 03:19:30 CST          ;785063970
391994:11:21T14:05:32+0000         ;785426732
40Mon, 21 Nov 94 14:05:32 GMT          ;785426732
41Mon, 14 Nov 94 15:08:49 CST          ;784847329
42Wed, 16 Nov 94 14:48:06 GMT          ;784997286
43Thu, 17 Nov 94 14:22:03 GMT          ;785082123
44Wed, 16 Nov 94 14:36:00 GMT          ;784996560
45Wed, 16 Nov 94 09:23:17 GMT          ;784977797
46Wed, 16 Nov 94 10:01:43 GMT          ;784980103
47Wed, 16 Nov 94 15:03:35 GMT          ;784998215
48Mon, 21 Nov 94 13:55:19 GMT          ;785426119
49Wed, 16 Nov 94 08:46:11 CST          ;784997171
50Wed, 9 Nov 1994 09:50:32 -0500 (EST) ;784392632
51Thu, 13 Oct 94 10:13:13 -0700        ;782068393
52Sat, 19 Nov 1994 16:59:14 +0100      ;785260754
53Thu, 3 Nov 94 14:10:47 EST       ;783889847
54Thu, 3 Nov 94 21:51:09 EST       ;783917469
55Fri, 4 Nov 94 9:24:52 EST        ;783959092
56Wed, 9 Nov 94 09:38:54 EST       ;784391934
57Mon, 14 Nov 94 13:20:12 EST          ;784837212
58Wed, 16 Nov 94 17:09:13 EST          ;785023753
59Tue, 15 Nov 94 12:27:01 PST          ;784931221
60Fri, 18 Nov 1994 07:34:05 -0600      ;785165645
61Mon, 21 Nov 94 14:34:28 -0500        ;785446468
62Fri, 18 Nov 1994 12:05:47 -0800 (PST);785189147
63Fri, 18 Nov 1994 12:36:26 -0800 (PST);785190986
64Wed, 16 Nov 1994 15:58:58 GMT        ;785001538
65Sun, 06 Nov 94 14:27:40 -0500        ;784150060
66Mon, 07 Nov 94 08:20:13 -0500        ;784214413
67Mon, 07 Nov 94 16:48:42 -0500        ;784244922
68Wed, 09 Nov 94 15:46:16 -0500        ;784413976
69Sun, 6 Nov 1994 02:38:17 -0800       ;784118297
70Tue, 1 Nov 1994 13:53:49 -0500       ;783716029
71Tue, 15 Nov 94 08:31:59 +0100        ;784884719
72Sun, 6 Nov 1994 11:09:12 -0500 (IST) ;784138152
73Fri, 4 Nov 94 12:52:10 EST       ;783971530
74Mon, 31 Oct 1994 14:17:39 -0500 (EST);783631059
75Mon, 14 Nov 94 11:25:00 CST          ;784833900
76Mon, 14 Nov 94 13:26:29 CST          ;784841189
77Fri, 18 Nov 94 8:42:47 CST       ;785169767
78Thu, 17 Nov 94 14:32:01 +0900        ;785050321
79Wed, 2 Nov 94 18:16:31 +0100         ;783796591
80Fri, 18 Nov 94 10:46:26 +0100        ;785151986
81Tue, 8 Nov 1994 22:39:28 +0200       ;784327168
82Wed, 16 Nov 1994 10:01:08 -0500 (EST);784998068
83Wed, 2 Nov 1994 16:59:42 -0800       ;783824382
84Wed, 9 Nov 94 10:00:23 PST       ;784404023
85Fri, 18 Nov 94 17:01:43 PST          ;785206903
86Mon, 14 Nov 1994 14:47:46 -0500      ;784842466
87Mon, 21 Nov 1994 04:56:04 -0500 (EST);785411764
88Mon, 21 Nov 1994 11:50:12 -0800      ;785447412
89Sat, 5 Nov 1994 14:04:16 -0600 (CST) ;784065856
90Sat, 05 Nov 94 13:10:13 MST          ;784066213
91Wed, 02 Nov 94 10:47:48 -0800        ;783802068
92Wed, 02 Nov 94 13:19:15 -0800        ;783811155
93Thu, 03 Nov 94 15:27:07 -0800        ;783905227
94Fri, 04 Nov 94 09:12:12 -0800        ;783969132
95Wed, 9 Nov 1994 10:13:03 +0000 (GMT) ;784375983
96Wed, 9 Nov 1994 15:28:37 +0000 (GMT) ;784394917
97Wed, 2 Nov 1994 17:37:41 +0100 (MET) ;783794261
9805 Nov 94 14:22:19 PST           ;784074139
9916 Nov 94 22:28:20 PST           ;785053700
100Tue, 1 Nov 1994 19:51:15 -0800       ;783748275
101Wed, 2 Nov 94 12:21:23 GMT       ;783778883
102Fri, 18 Nov 94 18:07:03 GMT          ;785182023
103Wed, 16 Nov 1994 11:26:27 -0500      ;785003187
104Sun, 6 Nov 1994 13:48:49 -0500       ;784147729
105Tue, 8 Nov 1994 13:19:37 -0800       ;784329577
106Fri, 18 Nov 1994 11:01:12 -0800      ;785185272
107Mon, 21 Nov 1994 00:47:58 -0500      ;785396878
108Mon, 7 Nov 1994 14:22:48 -0800 (PST) ;784246968
109Wed, 16 Nov 1994 15:56:45 -0800 (PST);785030205
110Thu, 3 Nov 1994 13:17:47 +0000       ;783868667
111Wed, 9 Nov 1994 17:32:50 -0500 (EST) ;784420370
112Wed, 9 Nov 94 16:31:52 PST       ;784427512
113Wed, 09 Nov 94 10:41:10 -0800        ;784406470
114Wed, 9 Nov 94 08:42:22 MST       ;784395742
115Mon, 14 Nov 1994 08:32:13 -0800      ;784830733
116Mon, 14 Nov 1994 11:34:32 -0500 (EST);784830872
117Mon, 14 Nov 94 16:48:09 GMT      ;784831689
118Tue, 15 Nov 1994 10:27:33 +0000      ;784895253
119Wed, 02 Nov 94 13:56:54 MST          ;783809814
120Thu, 03 Nov 94 15:24:45 MST          ;783901485
121Thu, 3 Nov 1994 15:13:53 -0700 (MST) ;783900833
122Fri, 04 Nov 94 08:15:13 MST          ;783962113
123Thu, 3 Nov 94 18:15:47 EST       ;783904547
124Tue, 08 Nov 94 07:02:33 MST          ;784303353
125Thu, 3 Nov 94 18:15:47 EST       ;783904547
126Tue, 15 Nov 94 07:26:05 MST          ;784909565
127Wed, 2 Nov 1994 00:00:55 -0600 (CST) ;783756055
128Sun, 6 Nov 1994 01:19:13 -0600 (CST) ;784106353
129Mon, 7 Nov 1994 23:16:57 -0600 (CST) ;784271817
130Tue, 08 Nov 1994 13:21:21 -0600      ;784322481
131Mon, 07 Nov 94 13:47:37 PST          ;784244857
132Tue, 08 Nov 94 11:23:19 PST          ;784322599
133Tue, 01 Nov 1994 11:28:25 -0800      ;783718105
134Tue, 15 Nov 1994 13:11:47 -0800      ;784933907
135Tue, 15 Nov 1994 13:18:38 -0800      ;784934318
136Tue, 15 Nov 1994 0:18:38 -0800       ;784887518
137Jul 13 1999 1:23P GMT            ;931872180
138Jul 13 1999 1:23P.M GMT          ;931872180
139Jul 13 1999 1:23P.M. GMT         ;931872180
1402001-02-26T13:44:12-0700         ;983220252
1412001-02-26T13:44-0700            ;983220240
1422001-02-26T13-0700           ;983217600
1432001-02-26T13-44-12-0700         ;983220252
1442001-02-26T13-44-0700            ;983220240
1452001-02-26T13-0700           ;983217600
14607/Nov/2000:16:45:56 +0100       ;973611956
1472002-11-07T23:31:49-05:00        ;1036729909
1482003-02-17T07:45:56Z             ;1045467956
1492003-02-17T08:14:07.198189+0000      ;1045469647.198189
150!;
151
152my @data = split(/\n/, $data);
153
154plan tests => scalar @data;
155
156my $test_num = 0;
157foreach my $test (@data) {
158    $test_num++;
159
160    my ($format, $time) = split( ';', $test );
161
162    my $dt = DateTime::Format::DateParse->parse_datetime( $format );
163    my $testdt = DateTime->from_epoch( epoch => $time );
164    # Make sure that the test format & epoch time are compared in the same time
165    # zone.  This fixes the issue with the epoch time being relative to UTC but
166    # the format being intereprated as being in the local (non-UTC) timezone.
167    $testdt->set_time_zone($dt->time_zone);
168
169    # The first five tests are parsed in the current time zone
170    # But the check number is in GMT
171    if ( $test_num < 6 ) {
172        # convert local time to 'UTC'
173        $dt = $dt + DateTime::Duration->new(
174            seconds => $dt->time_zone->offset_for_datetime( $dt )
175        );
176    }
177
178    # skip testing "2003-02-17T08:14:07.198189+0000"
179    if ( $test_num == 135 ) {
180        SKIP: {
181            skip "This test exceedes DateTime's precision limit", 1;
182        };
183        next;
184    }
185
186    is( $dt, $testdt, $format . " " . $dt->nanosecond. " " . $testdt->nanosecond);
187}
188