10
require Time::Local if $^O eq "MacOS";
11
my $offset = ($^O eq "MacOS") ? Time::Local::timegm(0,0,0,1,0,70) : 0;
13
# test str2time for supported dates. Test cases with 2 digit year
14
# will probably break in year 2044.
17
'Thu Feb 3 00:00:00 GMT 1994', # ctime format
18
'Thu Feb 3 00:00:00 1994', # same as ctime, except no TZ
20
'Thu, 03 Feb 1994 00:00:00 GMT', # proposed new HTTP format
21
'Thursday, 03-Feb-94 00:00:00 GMT', # old rfc850 HTTP format
22
'Thursday, 03-Feb-1994 00:00:00 GMT', # broken rfc850 HTTP format
24
'03/Feb/1994:00:00:00 0000', # common logfile format
25
'03/Feb/1994:01:00:00 +0100', # common logfile format
26
'02/Feb/1994:23:00:00 -0100', # common logfile format
28
'03 Feb 1994 00:00:00 GMT', # HTTP format (no weekday)
29
'03-Feb-94 00:00:00 GMT', # old rfc850 (no weekday)
30
'03-Feb-1994 00:00:00 GMT', # broken rfc850 (no weekday)
31
'03-Feb-1994 00:00 GMT', # broken rfc850 (no weekday, no seconds)
32
'03-Feb-1994 00:00', # VMS dir listing format
34
'03-Feb-94', # old rfc850 HTTP format (no weekday, no time)
35
'03-Feb-1994', # broken rfc850 HTTP format (no weekday, no time)
36
'03 Feb 1994', # proposed new HTTP format (no weekday, no time)
37
'03/Feb/1994', # common logfile format (no time, no offset)
39
#'Feb 3 00:00', # Unix 'ls -l' format (can't really test it here)
40
'Feb 3 1994', # Unix 'ls -l' format
42
"02-03-94 12:00AM", # Windows 'dir' format
45
'1994-02-03 00:00:00 +0000',
48
'1994-02-03T00:00:00+0000',
49
'1994-02-02T23:00:00-0100',
50
'1994-02-02T23:00:00-01:00',
51
'1994-02-03T00:00:00 Z',
55
# A few tests with extra space at various places
60
my $time = (760233600 + $offset); # assume broken POSIX counting of seconds
67
$t = str2time($_, "GMT");
69
my $t2 = str2time(lc($_), "GMT");
70
my $t3 = str2time(uc($_), "GMT");
80
ok(time2str($time), 'Thu, 03 Feb 1994 00:00:00 GMT');
82
# test the 'ls -l' format with missing year$
83
# round to nearest minute 3 days ago.
84
$time = int((time - 3 * 24*60*60) /60)*60;
85
my ($min, $hr, $mday, $mon) = (localtime $time)[1,2,3,4];
86
$mon = (qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec))[$mon];
87
my $str = sprintf("$mon %02d %02d:%02d", $mday, $hr, $min);
88
my $t = str2time($str);
92
for (undef, '', 'Garbage',
93
'Mandag 16. September 1996',
95
# 'Thu Feb 3 00:00:00 CET 1994',
96
# 'Thu, 03 Feb 1994 00:00:00 CET',
97
# 'Wednesday, 31-Dec-69 23:59:59 GMT',
103
'1980-01-01 25:00:00',
104
'1980-01-01 00:61:00',
105
'1980-01-01 00:00:61',
110
if (defined str2time $_) {
111
print "str2time($_) is not undefined\n";
115
print defined($_) ? "\n# '$_'\n" : "\n# undef\n";
120
print "Testing AM/PM gruff...\n";
122
# Test the str2iso routines
123
use HTTP::Date qw(time2iso time2isoz);
125
print "Testing time2iso functions\n";
127
$t = time2iso(str2time("11-12-96 0:00AM"));
128
ok($t, "1996-11-12 00:00:00");
130
$t = time2iso(str2time("11-12-96 12:00AM"));
131
ok($t, "1996-11-12 00:00:00");
133
$t = time2iso(str2time("11-12-96 0:00PM"));
134
ok($t, "1996-11-12 12:00:00");
136
$t = time2iso(str2time("11-12-96 12:00PM"));
137
ok($t, "1996-11-12 12:00:00");
140
$t = time2iso(str2time("11-12-96 1:05AM"));
141
ok($t, "1996-11-12 01:05:00");
143
$t = time2iso(str2time("11-12-96 12:05AM"));
144
ok($t, "1996-11-12 00:05:00");
146
$t = time2iso(str2time("11-12-96 1:05PM"));
147
ok($t, "1996-11-12 13:05:00");
149
$t = time2iso(str2time("11-12-96 12:05PM"));
150
ok($t, "1996-11-12 12:05:00");
152
$t = str2time("2000-01-01 00:00:01.234");
153
print "FRAC $t = ", time2iso($t), "\n";
154
ok(abs(($t - int($t)) - 0.234) < 0.000001);
157
$b = time2iso(500000);
158
print "LOCAL $a $b\n";
160
my $bz = time2isoz(500000);
161
print "GMT $az $bz\n";
163
for ($a, $b) { ok(/^\d{4}-\d\d-\d\d \d\d:\d\d:\d\d$/); }
164
for ($az, $bz) { ok(/^\d{4}-\d\d-\d\d \d\d:\d\d:\d\dZ$/); }
166
# Test the parse_date interface
167
use HTTP::Date qw(parse_date);
169
my @d = parse_date("Jan 1 2001");
171
ok(!defined(pop(@d)));
172
ok("@d", "2001 1 1 0 0 0");
174
# This test will break around year 2070
175
ok(parse_date("03-Feb-20"), "2020-02-03 00:00:00");
177
# This test will break around year 2048
178
ok(parse_date("03-Feb-98"), "1998-02-03 00:00:00");
180
print "HTTP::Date $HTTP::Date::VERSION\n";