line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Pcore::Util::Date; |
2
|
|
|
|
|
|
|
|
3
|
1
|
|
|
1
|
|
9
|
use Pcore; |
|
1
|
|
|
|
|
3
|
|
|
1
|
|
|
|
|
7
|
|
4
|
1
|
|
|
1
|
|
8
|
use base qw[Time::Moment Pcore::Util::Date::Strptime]; |
|
1
|
|
|
|
|
3
|
|
|
1
|
|
|
|
|
426
|
|
5
|
|
|
|
|
|
|
|
6
|
1
|
|
|
1
|
1
|
4
|
sub parse ( $self, $date ) { |
|
1
|
|
|
|
|
3
|
|
|
1
|
|
|
|
|
3
|
|
|
1
|
|
|
|
|
3
|
|
7
|
1
|
|
|
|
|
4
|
state $init = do { |
8
|
1
|
|
|
|
|
631
|
require HTTP::Date; |
9
|
1
|
|
|
|
|
3317
|
require Time::Zone; |
10
|
|
|
|
|
|
|
|
11
|
1
|
|
|
|
|
1304
|
1; |
12
|
|
|
|
|
|
|
}; |
13
|
|
|
|
|
|
|
|
14
|
1
|
50
|
|
|
|
5
|
if ( my @http_date = HTTP::Date::parse_date($date) ) { |
15
|
1
|
|
|
|
|
47
|
my %args = ( # |
16
|
|
|
|
|
|
|
year => $http_date[0], |
17
|
|
|
|
|
|
|
month => $http_date[1], |
18
|
|
|
|
|
|
|
day => $http_date[2], |
19
|
|
|
|
|
|
|
hour => $http_date[3], |
20
|
|
|
|
|
|
|
minute => $http_date[4], |
21
|
|
|
|
|
|
|
second => $http_date[5], |
22
|
|
|
|
|
|
|
nanosecond => 0, |
23
|
|
|
|
|
|
|
); |
24
|
|
|
|
|
|
|
|
25
|
1
|
50
|
|
|
|
4
|
if ( defined $http_date[6] ) { |
26
|
1
|
|
|
|
|
7
|
my $offset = Time::Zone::tz_offset( $http_date[6] ); |
27
|
|
|
|
|
|
|
|
28
|
|
|
|
|
|
|
# invalid offset |
29
|
1
|
50
|
|
|
|
54
|
die qq[Invalid date offset "$http_date[6]"] if !defined $offset; |
30
|
|
|
|
|
|
|
|
31
|
1
|
|
|
|
|
7
|
$args{offset} = $offset / 60; |
32
|
|
|
|
|
|
|
} |
33
|
|
|
|
|
|
|
|
34
|
1
|
|
|
|
|
119
|
return $self->new(%args); |
35
|
|
|
|
|
|
|
} |
36
|
|
|
|
|
|
|
else { |
37
|
0
|
|
|
|
|
0
|
return; |
38
|
|
|
|
|
|
|
} |
39
|
|
|
|
|
|
|
} |
40
|
|
|
|
|
|
|
|
41
|
|
|
|
|
|
|
# %a, %d %b %Y %H:%M:%S %z |
42
|
0
|
|
|
0
|
0
|
0
|
sub to_rfc_1123 ($self) { |
|
0
|
|
|
|
|
0
|
|
|
0
|
|
|
|
|
0
|
|
43
|
0
|
|
|
|
|
0
|
return $self->strftime('%a, %d %b %Y %H:%M:%S %z'); |
44
|
|
|
|
|
|
|
} |
45
|
|
|
|
|
|
|
|
46
|
|
|
|
|
|
|
*to_http_date = \&to_rfc_2616; |
47
|
|
|
|
|
|
|
|
48
|
|
|
|
|
|
|
# %a, %d %b %Y %H:%M:%S GMT |
49
|
1
|
|
|
1
|
0
|
4
|
sub to_rfc_2616 ($self) { |
|
1
|
|
|
|
|
4
|
|
|
1
|
|
|
|
|
2
|
|
50
|
1
|
|
|
|
|
50
|
return $self->at_utc->strftime('%a, %d %b %Y %H:%M:%S GMT'); |
51
|
|
|
|
|
|
|
} |
52
|
|
|
|
|
|
|
|
53
|
|
|
|
|
|
|
# %Y-%m-%dT%H:%M:%S%Z |
54
|
0
|
|
|
0
|
0
|
|
sub to_w3cdtf ($self) { |
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
55
|
0
|
|
|
|
|
|
return $self->strftime('%Y-%m-%dT%H:%M:%S%Z'); |
56
|
|
|
|
|
|
|
} |
57
|
|
|
|
|
|
|
|
58
|
|
|
|
|
|
|
1; |
59
|
|
|
|
|
|
|
__END__ |
60
|
|
|
|
|
|
|
=pod |
61
|
|
|
|
|
|
|
|
62
|
|
|
|
|
|
|
=encoding utf8 |
63
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
=head1 NAME |
65
|
|
|
|
|
|
|
|
66
|
|
|
|
|
|
|
Pcore::Util::Date |
67
|
|
|
|
|
|
|
|
68
|
|
|
|
|
|
|
=head1 SYNOPSIS |
69
|
|
|
|
|
|
|
|
70
|
|
|
|
|
|
|
=head1 DESCRIPTION |
71
|
|
|
|
|
|
|
|
72
|
|
|
|
|
|
|
=cut |