| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
# $Id: Date.pm 7370 2012-04-09 01:17:33Z chris $ |
|
2
|
|
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
=head1 NAME |
|
4
|
|
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
WebService::IMDB::Date |
|
6
|
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
=head1 DESCRIPTION |
|
8
|
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
Constructor always returns a L. |
|
10
|
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
=cut |
|
12
|
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
package WebService::IMDB::Date; |
|
14
|
|
|
|
|
|
|
|
|
15
|
2
|
|
|
2
|
|
12
|
use strict; |
|
|
2
|
|
|
|
|
2
|
|
|
|
2
|
|
|
|
|
71
|
|
|
16
|
2
|
|
|
2
|
|
10
|
use warnings; |
|
|
2
|
|
|
|
|
5
|
|
|
|
2
|
|
|
|
|
86
|
|
|
17
|
|
|
|
|
|
|
|
|
18
|
|
|
|
|
|
|
our $VERSION = '0.05'; |
|
19
|
|
|
|
|
|
|
|
|
20
|
2
|
|
|
2
|
|
11
|
use Carp; |
|
|
2
|
|
|
|
|
4
|
|
|
|
2
|
|
|
|
|
157
|
|
|
21
|
|
|
|
|
|
|
our @CARP_NOT = qw(WebService::IMDB WebService::IMDB::Trivium); |
|
22
|
|
|
|
|
|
|
|
|
23
|
2
|
|
|
2
|
|
2420
|
use DateTime::Format::Strptime; |
|
|
2
|
|
|
|
|
418071
|
|
|
|
2
|
|
|
|
|
170
|
|
|
24
|
2
|
|
|
2
|
|
2661
|
use DateTime::Incomplete; |
|
|
2
|
|
|
|
|
128825
|
|
|
|
2
|
|
|
|
|
1497
|
|
|
25
|
|
|
|
|
|
|
|
|
26
|
|
|
|
|
|
|
|
|
27
|
|
|
|
|
|
|
sub _new { |
|
28
|
97
|
|
|
97
|
|
171
|
my $class = shift; |
|
29
|
97
|
|
|
|
|
112
|
my $ws = shift; |
|
30
|
97
|
50
|
|
|
|
207
|
my $data = shift or die; |
|
31
|
|
|
|
|
|
|
|
|
32
|
97
|
100
|
100
|
|
|
843
|
if (ref $data eq "HASH" && exists $data->{'normal'} && defined $data->{'normal'}) { |
|
|
|
100
|
66
|
|
|
|
|
|
|
|
50
|
66
|
|
|
|
|
|
|
|
|
33
|
|
|
|
|
|
33
|
|
|
|
|
|
|
# TODO: Check whehter locale affects this. |
|
34
|
75
|
|
|
|
|
131
|
my $dt = $data->{'normal'}; |
|
35
|
75
|
50
|
|
|
|
550
|
my ($y, $m, $d) = $dt =~ m/^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?$/ or die "Failed to parse '$dt'"; |
|
36
|
75
|
100
|
66
|
|
|
556
|
if (defined $y && defined $m && defined $d) { |
|
|
|
100
|
100
|
|
|
|
|
|
|
|
50
|
66
|
|
|
|
|
|
37
|
68
|
|
|
|
|
283
|
return DateTime::Incomplete->new('year' => $y, 'month' => $m, 'day' => $d); |
|
38
|
|
|
|
|
|
|
} elsif (defined $y && defined $m) { |
|
39
|
2
|
|
|
|
|
21
|
return DateTime::Incomplete->new('year' => $y, 'month' => $m); |
|
40
|
|
|
|
|
|
|
} elsif (defined $y) { |
|
41
|
5
|
|
|
|
|
19
|
return DateTime::Incomplete->new('year' => $y); |
|
42
|
|
|
|
|
|
|
} else { |
|
43
|
0
|
|
|
|
|
0
|
die ""; |
|
44
|
|
|
|
|
|
|
} |
|
45
|
|
|
|
|
|
|
|
|
46
|
|
|
|
|
|
|
} elsif (ref $data eq "HASH" && exists $data->{'text'}) { |
|
47
|
|
|
|
|
|
|
|
|
48
|
1
|
50
|
|
|
|
7
|
if (!defined $data->{'text'}) { # A bit hacky, but not sure how else to deal with this. |
|
49
|
0
|
|
|
|
|
0
|
return undef; |
|
50
|
|
|
|
|
|
|
} else { |
|
51
|
|
|
|
|
|
|
# Some 'text' dates are actually parseable, e.g. those of the format "July 14, 2007". Attempt to detect them |
|
52
|
|
|
|
|
|
|
# and parse to a DateTime::Incomplete |
|
53
|
1
|
|
|
|
|
14
|
my $d = DateTime::Format::Strptime->new('pattern' => "%B %d, %Y", 'on_error' => "undef")->parse_datetime($data->{'text'}); |
|
54
|
1
|
50
|
|
|
|
787
|
if (defined $d) { |
|
|
|
50
|
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
55
|
0
|
|
|
|
|
0
|
return DateTime::Incomplete->new('year' => $d->year(), 'month' => $d->month(), 'day' => $d->day()); |
|
56
|
|
|
|
|
|
|
|
|
57
|
|
|
|
|
|
|
} elsif ($data->{'text'} =~ m/^\d{1,2}\/\d{2}$/) { |
|
58
|
0
|
0
|
|
|
|
0
|
my ($m, $y) = $data->{'text'} =~ m/^(\d{1,2})\/(\d{2})$/ or die "Failed to parse '$data->{'text'}'"; |
|
59
|
0
|
|
|
|
|
0
|
return DateTime::Incomplete->new('year' => $y, 'month' => $m); |
|
60
|
|
|
|
|
|
|
|
|
61
|
|
|
|
|
|
|
} elsif ($data->{'text'} =~ m/^\d{1,2}\/\d{1,2}\/\d{2}$/) { |
|
62
|
0
|
0
|
|
|
|
0
|
my ($m, $d, $y) = $data->{'text'} =~ m/^(\d{1,2})\/(\d{1,2})\/(\d{2})$/ or die "Failed to parse '$data->{'text'}'"; |
|
63
|
0
|
|
|
|
|
0
|
return DateTime::Incomplete->new('year' => $y, 'month' => $m, 'day' => $d); |
|
64
|
|
|
|
|
|
|
|
|
65
|
|
|
|
|
|
|
} else { |
|
66
|
1
|
|
|
|
|
8
|
return $data->{'text'}; |
|
67
|
|
|
|
|
|
|
} |
|
68
|
|
|
|
|
|
|
} |
|
69
|
|
|
|
|
|
|
|
|
70
|
|
|
|
|
|
|
} elsif (ref $data eq "" && $data =~ m/^\d{4}-\d{2}-\d{2}$/) { |
|
71
|
21
|
50
|
|
|
|
124
|
my ($y, $m, $d) = $data =~ m/^(\d{4})-(\d{2})-(\d{2})$/ or die "Failed to parse '$data'"; |
|
72
|
21
|
|
|
|
|
92
|
return DateTime::Incomplete->new('year' => $y, 'month' => $m, 'day' => $d); |
|
73
|
|
|
|
|
|
|
|
|
74
|
|
|
|
|
|
|
} else { |
|
75
|
0
|
|
|
|
|
|
croak "Unable to parse date"; |
|
76
|
|
|
|
|
|
|
} |
|
77
|
|
|
|
|
|
|
} |
|
78
|
|
|
|
|
|
|
|
|
79
|
|
|
|
|
|
|
1; |