line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Pinwheel::Model::Time; |
2
|
|
|
|
|
|
|
|
3
|
7
|
|
|
7
|
|
27087
|
use strict; |
|
7
|
|
|
|
|
26
|
|
|
7
|
|
|
|
|
289
|
|
4
|
7
|
|
|
7
|
|
37
|
use warnings; |
|
7
|
|
|
|
|
12
|
|
|
7
|
|
|
|
|
188
|
|
5
|
|
|
|
|
|
|
|
6
|
7
|
|
|
7
|
|
2107
|
use POSIX qw(); |
|
7
|
|
|
|
|
21023
|
|
|
7
|
|
|
|
|
420
|
|
7
|
7
|
|
|
7
|
|
6332
|
use Time::Local qw(timegm_nocheck timelocal_nocheck); |
|
7
|
|
|
|
|
22817
|
|
|
7
|
|
|
|
|
2793
|
|
8
|
|
|
|
|
|
|
|
9
|
7
|
|
|
7
|
|
7718
|
use Pinwheel::Model::DateBase; |
|
7
|
|
|
|
|
22
|
|
|
7
|
|
|
|
|
423
|
|
10
|
7
|
|
|
7
|
|
4428
|
use Pinwheel::Model::Date; |
|
7
|
|
|
|
|
21
|
|
|
7
|
|
|
|
|
9959
|
|
11
|
|
|
|
|
|
|
|
12
|
|
|
|
|
|
|
our @ISA = qw(Pinwheel::Model::DateBase); |
13
|
|
|
|
|
|
|
|
14
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
# Constructors |
16
|
|
|
|
|
|
|
|
17
|
|
|
|
|
|
|
sub new |
18
|
|
|
|
|
|
|
{ |
19
|
270
|
|
|
270
|
0
|
11843
|
my ($class, $s, $utc) = @_; |
20
|
270
|
100
|
|
|
|
899
|
$s = CORE::time() unless defined($s); |
21
|
270
|
100
|
|
|
|
3756
|
my $t = $utc ? [gmtime $s] : [localtime $s]; |
22
|
270
|
100
|
|
|
|
2266
|
return bless({ s => $s, t => $t, u => $utc ? 1 : 0 }, $class); |
23
|
|
|
|
|
|
|
} |
24
|
|
|
|
|
|
|
|
25
|
7
|
|
|
7
|
0
|
1254
|
sub now { new Pinwheel::Model::Time(CORE::time(), shift) } |
26
|
103
|
|
|
103
|
0
|
8140
|
sub utc { new Pinwheel::Model::Time(timegm_nocheck(_make_t(@_)), 1) } |
27
|
79
|
|
|
79
|
0
|
35776
|
sub local { new Pinwheel::Model::Time(timelocal_nocheck(_make_t(@_)), 0) } |
28
|
|
|
|
|
|
|
sub now_0seconds |
29
|
|
|
|
|
|
|
{ |
30
|
3
|
|
|
3
|
0
|
9305
|
my $t = now(@_); |
31
|
3
|
|
|
|
|
17
|
$t->{s} -= $t->{t}[0]; |
32
|
3
|
|
|
|
|
7
|
$t->{t}[0] = 0; |
33
|
3
|
|
|
|
|
7
|
return $t; |
34
|
|
|
|
|
|
|
} |
35
|
|
|
|
|
|
|
|
36
|
|
|
|
|
|
|
sub _make_t |
37
|
|
|
|
|
|
|
{ |
38
|
182
|
|
100
|
182
|
|
3744
|
($_[5] || 0, $_[4] || 0, $_[3] || 0, $_[2] || 1, ($_[1] || 1) - 1, $_[0]); |
|
|
|
100
|
|
|
|
|
|
|
|
100
|
|
|
|
|
|
|
|
100
|
|
|
|
|
|
|
|
100
|
|
|
|
|
39
|
|
|
|
|
|
|
} |
40
|
|
|
|
|
|
|
|
41
|
|
|
|
|
|
|
sub _pair |
42
|
|
|
|
|
|
|
{ |
43
|
17
|
|
|
17
|
|
45
|
$_[0]->{pair} = $_[1]; |
44
|
17
|
|
|
|
|
165
|
return $_[0]; |
45
|
|
|
|
|
|
|
} |
46
|
|
|
|
|
|
|
|
47
|
|
|
|
|
|
|
sub _derived |
48
|
|
|
|
|
|
|
{ |
49
|
46
|
|
|
46
|
|
81
|
my ($self, $y, $m, $d, $hh, $mm, $ss) = @_; |
50
|
46
|
100
|
|
|
|
147
|
my $fn = $self->{u} ? \&timegm_nocheck : \&timelocal_nocheck; |
51
|
46
|
|
|
|
|
142
|
return new Pinwheel::Model::Time(&$fn($ss, $mm, $hh, $d, $m, $y), $self->{u}); |
52
|
|
|
|
|
|
|
} |
53
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
|
55
|
|
|
|
|
|
|
# Date/time values |
56
|
|
|
|
|
|
|
|
57
|
32
|
|
|
32
|
0
|
8705
|
sub timestamp { $_[0]->{s} } |
58
|
6
|
|
|
6
|
0
|
35
|
sub hour { $_[0]->{t}[2] } |
59
|
6
|
|
|
6
|
0
|
48
|
sub min { $_[0]->{t}[1] } |
60
|
5
|
|
|
5
|
0
|
31
|
sub sec { $_[0]->{t}[0] } |
61
|
|
|
|
|
|
|
|
62
|
|
|
|
|
|
|
|
63
|
|
|
|
|
|
|
# Formatting |
64
|
|
|
|
|
|
|
|
65
|
|
|
|
|
|
|
sub hh_mm |
66
|
|
|
|
|
|
|
{ |
67
|
2
|
|
|
2
|
0
|
17
|
my $t = $_[0]->{t}; |
68
|
2
|
|
|
|
|
16
|
return sprintf('%02d:%02d', $t->[2], $t->[1]); |
69
|
|
|
|
|
|
|
} |
70
|
|
|
|
|
|
|
|
71
|
|
|
|
|
|
|
sub hh_mm_ss |
72
|
|
|
|
|
|
|
{ |
73
|
2
|
|
|
2
|
0
|
8
|
my $t = $_[0]->{t}; |
74
|
2
|
|
|
|
|
15
|
return sprintf('%02d:%02d:%02d', $t->[2], $t->[1], $t->[0]); |
75
|
|
|
|
|
|
|
} |
76
|
|
|
|
|
|
|
|
77
|
|
|
|
|
|
|
sub rfc822 |
78
|
|
|
|
|
|
|
{ |
79
|
10
|
|
|
10
|
0
|
46
|
my $utc = $_[0]->getutc; |
80
|
10
|
|
|
|
|
21
|
my $t = $utc->{t}; |
81
|
10
|
|
|
|
|
43
|
return sprintf('%s, %02d %s %d %02d:%02d:%02d GMT', |
82
|
|
|
|
|
|
|
$utc->short_day_name, |
83
|
|
|
|
|
|
|
$t->[3], $utc->short_month_name, $t->[5] + 1900, |
84
|
|
|
|
|
|
|
$t->[2], $t->[1], $t->[0] |
85
|
|
|
|
|
|
|
); |
86
|
|
|
|
|
|
|
} |
87
|
|
|
|
|
|
|
|
88
|
|
|
|
|
|
|
sub iso8601 |
89
|
|
|
|
|
|
|
{ |
90
|
28
|
|
|
28
|
0
|
72
|
my $t = $_[0]->{t}; |
91
|
28
|
|
|
|
|
335
|
my $s = sprintf( |
92
|
|
|
|
|
|
|
'%d-%02d-%02dT%02d:%02d:%02d', |
93
|
|
|
|
|
|
|
$t->[5] + 1900, $t->[4] + 1, $t->[3], $t->[2], $t->[1], $t->[0] |
94
|
|
|
|
|
|
|
); |
95
|
28
|
50
|
|
|
|
194
|
return $s . ($t->[8] ? '+01:00' : 'Z'); |
96
|
|
|
|
|
|
|
} |
97
|
|
|
|
|
|
|
|
98
|
|
|
|
|
|
|
sub iso8601_ical |
99
|
|
|
|
|
|
|
{ |
100
|
2
|
|
|
2
|
0
|
6
|
my $t = $_[0]->{t}; |
101
|
2
|
|
|
|
|
11
|
my $s = sprintf( |
102
|
|
|
|
|
|
|
'%d%02d%02dT%02d%02d%02d', |
103
|
|
|
|
|
|
|
$t->[5] + 1900, $t->[4] + 1, $t->[3], $t->[2], $t->[1], $t->[0] |
104
|
|
|
|
|
|
|
); |
105
|
2
|
50
|
|
|
|
9
|
$s .= 'Z' unless $t->[8]; |
106
|
2
|
|
|
|
|
7
|
return $s; |
107
|
|
|
|
|
|
|
} |
108
|
|
|
|
|
|
|
|
109
|
|
|
|
|
|
|
|
110
|
|
|
|
|
|
|
# Date/time adjustment |
111
|
|
|
|
|
|
|
|
112
|
|
|
|
|
|
|
sub getutc |
113
|
|
|
|
|
|
|
{ |
114
|
23
|
|
|
23
|
0
|
56
|
my $self = shift; |
115
|
23
|
100
|
|
|
|
78
|
return $self if $self->{u}; |
116
|
19
|
100
|
|
|
|
69
|
return $self->{pair} if ($self->{pair}); |
117
|
15
|
|
|
|
|
47
|
return $self->{pair} = Pinwheel::Model::Time->new($self->{s}, 1)->_pair($self); |
118
|
|
|
|
|
|
|
} |
119
|
|
|
|
|
|
|
|
120
|
|
|
|
|
|
|
sub getlocal |
121
|
|
|
|
|
|
|
{ |
122
|
7
|
|
|
7
|
0
|
23
|
my $self = shift; |
123
|
7
|
100
|
|
|
|
31
|
return $self unless $self->{u}; |
124
|
4
|
100
|
|
|
|
19
|
return $self->{pair} if ($self->{pair}); |
125
|
2
|
|
|
|
|
8
|
return $self->{pair} = Pinwheel::Model::Time->new($self->{s}, 0)->_pair($self); |
126
|
|
|
|
|
|
|
} |
127
|
|
|
|
|
|
|
|
128
|
|
|
|
|
|
|
sub add |
129
|
|
|
|
|
|
|
{ |
130
|
4
|
|
|
4
|
0
|
15
|
my ($self, $seconds) = @_; |
131
|
4
|
|
|
|
|
18
|
return new Pinwheel::Model::Time($self->{s} + $seconds, $self->{u}); |
132
|
|
|
|
|
|
|
} |
133
|
|
|
|
|
|
|
|
134
|
|
|
|
|
|
|
|
135
|
|
|
|
|
|
|
# Type conversion |
136
|
|
|
|
|
|
|
|
137
|
|
|
|
|
|
|
sub toJson |
138
|
|
|
|
|
|
|
{ |
139
|
2
|
|
|
2
|
0
|
12
|
return $_[0]->timestamp; |
140
|
|
|
|
|
|
|
} |
141
|
|
|
|
|
|
|
|
142
|
|
|
|
|
|
|
sub sql_param |
143
|
|
|
|
|
|
|
{ |
144
|
2
|
|
|
2
|
0
|
24
|
return $_[0]->getutc->strftime('%Y-%m-%d %H:%M:%S'); |
145
|
|
|
|
|
|
|
} |
146
|
|
|
|
|
|
|
|
147
|
|
|
|
|
|
|
sub route_param |
148
|
|
|
|
|
|
|
{ |
149
|
2
|
|
|
2
|
0
|
10
|
return $_[0]->timestamp; |
150
|
|
|
|
|
|
|
} |
151
|
|
|
|
|
|
|
|
152
|
|
|
|
|
|
|
sub to_date |
153
|
|
|
|
|
|
|
{ |
154
|
1
|
|
|
1
|
0
|
14
|
Pinwheel::Model::Date::date($_[0]->{t}[5] + 1900, $_[0]->{t}[4] + 1, $_[0]->{t}[3]); |
155
|
|
|
|
|
|
|
} |
156
|
|
|
|
|
|
|
|
157
|
|
|
|
|
|
|
|
158
|
|
|
|
|
|
|
1; |
159
|
|
|
|
|
|
|
|
160
|
|
|
|
|
|
|
__DATA__ |