line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Olson::Abbreviations; |
2
|
3
|
|
|
3
|
|
35776
|
use strict; |
|
3
|
|
|
|
|
6
|
|
|
3
|
|
|
|
|
107
|
|
3
|
3
|
|
|
3
|
|
15
|
use warnings; |
|
3
|
|
|
|
|
7
|
|
|
3
|
|
|
|
|
85
|
|
4
|
|
|
|
|
|
|
|
5
|
3
|
|
|
3
|
|
2439
|
use Moose; |
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
use MooseX::ClassAttribute; |
8
|
|
|
|
|
|
|
use namespace::autoclean; |
9
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
our $VERSION = '0.04'; |
11
|
|
|
|
|
|
|
|
12
|
|
|
|
|
|
|
class_has 'ZONEMAP' => ( |
13
|
|
|
|
|
|
|
isa => 'HashRef[Maybe[Str]]' |
14
|
|
|
|
|
|
|
, is => 'rw' |
15
|
|
|
|
|
|
|
, traits => ['Hash'] |
16
|
|
|
|
|
|
|
, handles => { |
17
|
|
|
|
|
|
|
'_exists' => 'exists' |
18
|
|
|
|
|
|
|
, '_get' => 'get' |
19
|
|
|
|
|
|
|
, '_defined' => 'defined' |
20
|
|
|
|
|
|
|
} |
21
|
|
|
|
|
|
|
, default => sub { |
22
|
|
|
|
|
|
|
# Table for mapping abbreviated timezone names to tz_abbreviations |
23
|
|
|
|
|
|
|
return { |
24
|
|
|
|
|
|
|
'A' => '+0100', 'ACDT' => '+1030', 'ACST' => '+0930', |
25
|
|
|
|
|
|
|
'ADT' => undef, 'AEDT' => '+1100', 'AES' => '+1000', |
26
|
|
|
|
|
|
|
'AEST' => '+1000', 'AFT' => '+0430', 'AHDT' => '-0900', |
27
|
|
|
|
|
|
|
'AHST' => '-1000', 'AKDT' => '-0800', 'AKST' => '-0900', |
28
|
|
|
|
|
|
|
'AMST' => '+0400', 'AMT' => '+0400', 'ANAST' => '+1300', |
29
|
|
|
|
|
|
|
'ANAT' => '+1200', 'ART' => '-0300', 'AST' => undef, |
30
|
|
|
|
|
|
|
'AT' => '-0100', 'AWST' => '+0800', 'AZOST' => '+0000', |
31
|
|
|
|
|
|
|
'AZOT' => '-0100', 'AZST' => '+0500', 'AZT' => '+0400', |
32
|
|
|
|
|
|
|
'B' => '+0200', 'BADT' => '+0400', 'BAT' => '+0600', |
33
|
|
|
|
|
|
|
'BDST' => '+0200', 'BDT' => '+0600', 'BET' => '-1100', |
34
|
|
|
|
|
|
|
'BNT' => '+0800', 'BORT' => '+0800', 'BOT' => '-0400', |
35
|
|
|
|
|
|
|
'BRA' => '-0300', 'BST' => undef, 'BT' => undef, |
36
|
|
|
|
|
|
|
'BTT' => '+0600', 'C' => '+0300', 'CAST' => '+0930', |
37
|
|
|
|
|
|
|
'CAT' => undef, 'CCT' => undef, 'CDT' => undef, |
38
|
|
|
|
|
|
|
'CEST' => '+0200', 'CET' => '+0100', 'CETDST' => '+0200', |
39
|
|
|
|
|
|
|
'CHADT' => '+1345', 'CHAST' => '+1245', 'CKT' => '-1000', |
40
|
|
|
|
|
|
|
'CLST' => '-0300', 'CLT' => '-0400', 'COT' => '-0500', |
41
|
|
|
|
|
|
|
'CST' => undef, 'CSuT' => '+1030', 'CUT' => '+0000', |
42
|
|
|
|
|
|
|
'CVT' => '-0100', 'CXT' => '+0700', 'ChST' => '+1000', |
43
|
|
|
|
|
|
|
'D' => '+0400', 'DAVT' => '+0700', 'DDUT' => '+1000', |
44
|
|
|
|
|
|
|
'DNT' => '+0100', 'DST' => '+0200', 'E' => '+0500', |
45
|
|
|
|
|
|
|
'EASST' => '-0500', 'EAST' => undef, 'EAT' => '+0300', |
46
|
|
|
|
|
|
|
'ECT' => undef, 'EDT' => undef, 'EEST' => '+0300', |
47
|
|
|
|
|
|
|
'EET' => '+0200', 'EETDST' => '+0300', 'EGST' => '+0000', |
48
|
|
|
|
|
|
|
'EGT' => '-0100', 'EMT' => '+0100', 'EST' => undef, |
49
|
|
|
|
|
|
|
'ESuT' => '+1100', 'F' => '+0600', 'FDT' => undef, |
50
|
|
|
|
|
|
|
'FJST' => '+1300', 'FJT' => '+1200', 'FKST' => '-0300', |
51
|
|
|
|
|
|
|
'FKT' => '-0400', 'FST' => undef, 'FWT' => '+0100', |
52
|
|
|
|
|
|
|
'G' => '+0700', 'GALT' => '-0600', 'GAMT' => '-0900', |
53
|
|
|
|
|
|
|
'GEST' => '+0500', 'GET' => '+0400', 'GFT' => '-0300', |
54
|
|
|
|
|
|
|
'GILT' => '+1200', 'GMT' => '+0000', 'GST' => undef, |
55
|
|
|
|
|
|
|
'GT' => '+0000', 'GYT' => '-0400', 'GZ' => '+0000', |
56
|
|
|
|
|
|
|
'H' => '+0800', 'HAA' => '-0300', 'HAC' => '-0500', |
57
|
|
|
|
|
|
|
'HAE' => '-0400', 'HAP' => '-0700', 'HAR' => '-0600', |
58
|
|
|
|
|
|
|
'HAT' => '-0230', 'HAY' => '-0800', 'HDT' => '-0930', |
59
|
|
|
|
|
|
|
'HFE' => '+0200', 'HFH' => '+0100', 'HG' => '+0000', |
60
|
|
|
|
|
|
|
'HKT' => '+0800', 'HL' => 'local', 'HNA' => '-0400', |
61
|
|
|
|
|
|
|
'HNC' => '-0600', 'HNE' => '-0500', 'HNP' => '-0800', |
62
|
|
|
|
|
|
|
'HNR' => '-0700', 'HNT' => '-0330', 'HNY' => '-0900', |
63
|
|
|
|
|
|
|
'HOE' => '+0100', 'HST' => '-1000', 'I' => '+0900', |
64
|
|
|
|
|
|
|
'ICT' => '+0700', 'IDLE' => '+1200', 'IDLW' => '-1200', |
65
|
|
|
|
|
|
|
'IDT' => undef, 'IOT' => '+0500', 'IRDT' => '+0430', |
66
|
|
|
|
|
|
|
'IRKST' => '+0900', 'IRKT' => '+0800', 'IRST' => '+0430', |
67
|
|
|
|
|
|
|
'IRT' => '+0330', 'IST' => undef, 'IT' => '+0330', |
68
|
|
|
|
|
|
|
'ITA' => '+0100', 'JAVT' => '+0700', 'JAYT' => '+0900', |
69
|
|
|
|
|
|
|
'JST' => '+0900', 'JT' => '+0700', 'K' => '+1000', |
70
|
|
|
|
|
|
|
'KDT' => '+1000', 'KGST' => '+0600', 'KGT' => '+0500', |
71
|
|
|
|
|
|
|
'KOST' => '+1200', 'KRAST' => '+0800', 'KRAT' => '+0700', |
72
|
|
|
|
|
|
|
'KST' => '+0900', 'L' => '+1100', 'LHDT' => '+1100', |
73
|
|
|
|
|
|
|
'LHST' => '+1030', 'LIGT' => '+1000', 'LINT' => '+1400', |
74
|
|
|
|
|
|
|
'LKT' => '+0600', 'LST' => 'local', 'LT' => 'local', |
75
|
|
|
|
|
|
|
'M' => '+1200', 'MAGST' => '+1200', 'MAGT' => '+1100', |
76
|
|
|
|
|
|
|
'MAL' => '+0800', 'MART' => '-0930', 'MAT' => '+0300', |
77
|
|
|
|
|
|
|
'MAWT' => '+0600', 'MDT' => '-0600', 'MED' => '+0200', |
78
|
|
|
|
|
|
|
'MEDST' => '+0200', 'MEST' => '+0200', 'MESZ' => '+0200', |
79
|
|
|
|
|
|
|
'MET' => undef, 'MEWT' => '+0100', 'MEX' => '-0600', |
80
|
|
|
|
|
|
|
'MEZ' => '+0100', 'MHT' => '+1200', 'MMT' => '+0630', |
81
|
|
|
|
|
|
|
'MPT' => '+1000', 'MSD' => '+0400', 'MSK' => '+0300', |
82
|
|
|
|
|
|
|
'MSKS' => '+0400', 'MST' => '-0700', 'MT' => '+0830', |
83
|
|
|
|
|
|
|
'MUT' => '+0400', 'MVT' => '+0500', 'MYT' => '+0800', |
84
|
|
|
|
|
|
|
'N' => '-0100', 'NCT' => '+1100', 'NDT' => '-0230', |
85
|
|
|
|
|
|
|
'NFT' => undef, 'NOR' => '+0100', 'NOVST' => '+0700', |
86
|
|
|
|
|
|
|
'NOVT' => '+0600', 'NPT' => '+0545', 'NRT' => '+1200', |
87
|
|
|
|
|
|
|
'NST' => undef, 'NSUT' => '+0630', 'NT' => '-1100', |
88
|
|
|
|
|
|
|
'NUT' => '-1100', 'NZDT' => '+1300', 'NZST' => '+1200', |
89
|
|
|
|
|
|
|
'NZT' => '+1200', 'O' => '-0200', 'OESZ' => '+0300', |
90
|
|
|
|
|
|
|
'OEZ' => '+0200', 'OMSST' => '+0700', 'OMST' => '+0600', |
91
|
|
|
|
|
|
|
'OZ' => 'local', 'P' => '-0300', 'PDT' => '-0700', |
92
|
|
|
|
|
|
|
'PET' => '-0500', 'PETST' => '+1300', 'PETT' => '+1200', |
93
|
|
|
|
|
|
|
'PGT' => '+1000', 'PHOT' => '+1300', 'PHT' => '+0800', |
94
|
|
|
|
|
|
|
'PKT' => '+0500', 'PMDT' => '-0200', 'PMT' => '-0300', |
95
|
|
|
|
|
|
|
'PNT' => '-0830', 'PONT' => '+1100', 'PST' => '-0800', |
96
|
|
|
|
|
|
|
'PWT' => '+0900', 'PYST' => '-0300', 'PYT' => '-0400', |
97
|
|
|
|
|
|
|
'Q' => '-0400', 'R' => '-0500', 'R1T' => '+0200', |
98
|
|
|
|
|
|
|
'R2T' => '+0300', 'RET' => '+0400', 'ROK' => '+0900', |
99
|
|
|
|
|
|
|
'S' => '-0600', 'SADT' => '+1030', 'SAST' => undef, |
100
|
|
|
|
|
|
|
'SBT' => '+1100', 'SCT' => '+0400', 'SET' => '+0100', |
101
|
|
|
|
|
|
|
'SGT' => '+0800', 'SRT' => '-0300', 'SST' => undef, |
102
|
|
|
|
|
|
|
'SWT' => '+0100', 'T' => '-0700', 'TFT' => '+0500', |
103
|
|
|
|
|
|
|
'THA' => '+0700', 'THAT' => '-1000', 'TJT' => '+0500', |
104
|
|
|
|
|
|
|
'TKT' => '-1000', 'TMT' => '+0500', 'TOT' => '+1300', |
105
|
|
|
|
|
|
|
'TRUT' => '+1000', 'TST' => '+0300', 'TUC' => '+0000', |
106
|
|
|
|
|
|
|
'TVT' => '+1200', 'U' => '-0800', 'ULAST' => '+0900', |
107
|
|
|
|
|
|
|
'ULAT' => '+0800', 'USZ1' => '+0200', 'USZ1S' => '+0300', |
108
|
|
|
|
|
|
|
'USZ3' => '+0400', 'USZ3S' => '+0500', 'USZ4' => '+0500', |
109
|
|
|
|
|
|
|
'USZ4S' => '+0600', 'USZ5' => '+0600', 'USZ5S' => '+0700', |
110
|
|
|
|
|
|
|
'USZ6' => '+0700', 'USZ6S' => '+0800', 'USZ7' => '+0800', |
111
|
|
|
|
|
|
|
'USZ7S' => '+0900', 'USZ8' => '+0900', 'USZ8S' => '+1000', |
112
|
|
|
|
|
|
|
'USZ9' => '+1000', 'USZ9S' => '+1100', 'UTZ' => '-0300', |
113
|
|
|
|
|
|
|
'UYT' => '-0300', 'UZ10' => '+1100', 'UZ10S' => '+1200', |
114
|
|
|
|
|
|
|
'UZ11' => '+1200', 'UZ11S' => '+1300', 'UZ12' => '+1200', |
115
|
|
|
|
|
|
|
'UZ12S' => '+1300', 'UZT' => '+0500', 'V' => '-0900', |
116
|
|
|
|
|
|
|
'VET' => '-0400', 'VLAST' => '+1100', 'VLAT' => '+1000', |
117
|
|
|
|
|
|
|
'VTZ' => '-0200', 'VUT' => '+1100', 'W' => '-1000', |
118
|
|
|
|
|
|
|
'WAKT' => '+1200', 'WAST' => undef, 'WAT' => '+0100', |
119
|
|
|
|
|
|
|
'WEST' => '+0100', 'WESZ' => '+0100', 'WET' => '+0000', |
120
|
|
|
|
|
|
|
'WETDST' => '+0100', 'WEZ' => '+0000', 'WFT' => '+1200', |
121
|
|
|
|
|
|
|
'WGST' => '-0200', 'WGT' => '-0300', 'WIB' => '+0700', |
122
|
|
|
|
|
|
|
'WIT' => '+0900', 'WITA' => '+0800', 'WST' => undef, |
123
|
|
|
|
|
|
|
'WTZ' => '-0100', 'WUT' => '+0100', 'X' => '-1100', |
124
|
|
|
|
|
|
|
'Y' => '-1200', 'YAKST' => '+1000', 'YAKT' => '+0900', |
125
|
|
|
|
|
|
|
'YAPT' => '+1000', 'YDT' => '-0800', 'YEKST' => '+0600', |
126
|
|
|
|
|
|
|
'YEKT' => '+0500', 'YST' => '-0900', 'Z' => '+0000', |
127
|
|
|
|
|
|
|
} |
128
|
|
|
|
|
|
|
} |
129
|
|
|
|
|
|
|
); |
130
|
|
|
|
|
|
|
|
131
|
|
|
|
|
|
|
has 'tz_abbreviation' => ( isa => 'Str', is => 'rw', required => 1 ); |
132
|
|
|
|
|
|
|
|
133
|
|
|
|
|
|
|
sub is_known { |
134
|
|
|
|
|
|
|
my $self = shift; |
135
|
|
|
|
|
|
|
$self->_exists( $self->tz_abbreviation ); |
136
|
|
|
|
|
|
|
} |
137
|
|
|
|
|
|
|
|
138
|
|
|
|
|
|
|
sub is_unambigious { |
139
|
|
|
|
|
|
|
my $self = shift; |
140
|
|
|
|
|
|
|
$self->_defined( $self->tz_abbreviation ); |
141
|
|
|
|
|
|
|
} |
142
|
|
|
|
|
|
|
|
143
|
|
|
|
|
|
|
sub get_offset { |
144
|
|
|
|
|
|
|
my $self = shift; |
145
|
|
|
|
|
|
|
|
146
|
|
|
|
|
|
|
Carp::croak 'Unknown abreviation please submit ' |
147
|
|
|
|
|
|
|
. $self->tz_abbreviation |
148
|
|
|
|
|
|
|
. ' to : http://rt.cpan.org/NoAuth/Bugs.html?Dist=Olson-Abbreviations' |
149
|
|
|
|
|
|
|
unless $self->is_known |
150
|
|
|
|
|
|
|
; |
151
|
|
|
|
|
|
|
|
152
|
|
|
|
|
|
|
Carp::croak "Globally ambigious abbreviation detected" |
153
|
|
|
|
|
|
|
unless $self->is_unambigious; |
154
|
|
|
|
|
|
|
; |
155
|
|
|
|
|
|
|
|
156
|
|
|
|
|
|
|
$self->_get( $self->tz_abbreviation ); |
157
|
|
|
|
|
|
|
} |
158
|
|
|
|
|
|
|
|
159
|
|
|
|
|
|
|
__PACKAGE__->meta->make_immutable; |
160
|
|
|
|
|
|
|
|
161
|
|
|
|
|
|
|
1; |
162
|
|
|
|
|
|
|
|
163
|
|
|
|
|
|
|
__END__ |
164
|
|
|
|
|
|
|
|
165
|
|
|
|
|
|
|
=head1 NAME |
166
|
|
|
|
|
|
|
|
167
|
|
|
|
|
|
|
Olson::Abbreviations -globally unique timezones abbreviation handling |
168
|
|
|
|
|
|
|
|
169
|
|
|
|
|
|
|
=head1 DESCRIPTION |
170
|
|
|
|
|
|
|
|
171
|
|
|
|
|
|
|
This module should help you with converting commonly used and often ambigious olson |
172
|
|
|
|
|
|
|
abbreviations into TZ offset notation. |
173
|
|
|
|
|
|
|
|
174
|
|
|
|
|
|
|
=head2 NOT COMPLETE |
175
|
|
|
|
|
|
|
|
176
|
|
|
|
|
|
|
This module is released as 0.01 because it is useful. It is not complete. In order to |
177
|
|
|
|
|
|
|
be complete in the author's eyes this module must accept a locale and disambiguate based |
178
|
|
|
|
|
|
|
on that. |
179
|
|
|
|
|
|
|
|
180
|
|
|
|
|
|
|
EST is not ambigious if your standing in the US or in Austrailia. This module should |
181
|
|
|
|
|
|
|
handle this properly in the future. |
182
|
|
|
|
|
|
|
|
183
|
|
|
|
|
|
|
=head1 SYNOPSIS |
184
|
|
|
|
|
|
|
|
185
|
|
|
|
|
|
|
Quick summary of what the module does. |
186
|
|
|
|
|
|
|
|
187
|
|
|
|
|
|
|
Perhaps a little code snippet. |
188
|
|
|
|
|
|
|
|
189
|
|
|
|
|
|
|
use Olson::Abbreviations; |
190
|
|
|
|
|
|
|
|
191
|
|
|
|
|
|
|
my $oa = Olson::Abbreviations->new({ tz_abbreviation => 'EST' }); |
192
|
|
|
|
|
|
|
$oa->is_unambigious; # returns 0 |
193
|
|
|
|
|
|
|
$oa->is_known; # returns 1 |
194
|
|
|
|
|
|
|
$oa->get_offset # dies |
195
|
|
|
|
|
|
|
... |
196
|
|
|
|
|
|
|
|
197
|
|
|
|
|
|
|
=head1 METHODS |
198
|
|
|
|
|
|
|
|
199
|
|
|
|
|
|
|
=over 12 |
200
|
|
|
|
|
|
|
|
201
|
|
|
|
|
|
|
=item get_offset |
202
|
|
|
|
|
|
|
|
203
|
|
|
|
|
|
|
Returns the offset to UTC |
204
|
|
|
|
|
|
|
|
205
|
|
|
|
|
|
|
=item is_unambigious |
206
|
|
|
|
|
|
|
|
207
|
|
|
|
|
|
|
Returns 0|1 based on if the abbreviation is globally unambigious to the whole planet |
208
|
|
|
|
|
|
|
|
209
|
|
|
|
|
|
|
=item is_known |
210
|
|
|
|
|
|
|
|
211
|
|
|
|
|
|
|
Returns 0|1 based on if the abbreviation is known despite if it is ambigious or not |
212
|
|
|
|
|
|
|
|
213
|
|
|
|
|
|
|
=back |
214
|
|
|
|
|
|
|
|
215
|
|
|
|
|
|
|
=head1 AUTHOR |
216
|
|
|
|
|
|
|
|
217
|
|
|
|
|
|
|
Evan Carroll, C<< <me+cpan at evancarroll.com> >> |
218
|
|
|
|
|
|
|
|
219
|
|
|
|
|
|
|
=head1 BUGS |
220
|
|
|
|
|
|
|
|
221
|
|
|
|
|
|
|
Please report any bugs or feature requests to C<bug-olson-abbreviations at rt.cpan.org>, or through |
222
|
|
|
|
|
|
|
the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Olson-Abbreviations>. I will be notified, and then you'll |
223
|
|
|
|
|
|
|
automatically be notified of progress on your bug as I make changes. |
224
|
|
|
|
|
|
|
|
225
|
|
|
|
|
|
|
=head1 SUPPORT |
226
|
|
|
|
|
|
|
|
227
|
|
|
|
|
|
|
You can find documentation for this module with the perldoc command. |
228
|
|
|
|
|
|
|
|
229
|
|
|
|
|
|
|
perldoc Olson::Abbreviations |
230
|
|
|
|
|
|
|
|
231
|
|
|
|
|
|
|
|
232
|
|
|
|
|
|
|
You can also look for information at: |
233
|
|
|
|
|
|
|
|
234
|
|
|
|
|
|
|
=over 4 |
235
|
|
|
|
|
|
|
|
236
|
|
|
|
|
|
|
=item * RT: CPAN's request tracker |
237
|
|
|
|
|
|
|
|
238
|
|
|
|
|
|
|
L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Olson-Abbreviations> |
239
|
|
|
|
|
|
|
|
240
|
|
|
|
|
|
|
=item * AnnoCPAN: Annotated CPAN documentation |
241
|
|
|
|
|
|
|
|
242
|
|
|
|
|
|
|
L<http://annocpan.org/dist/Olson-Abbreviations> |
243
|
|
|
|
|
|
|
|
244
|
|
|
|
|
|
|
=item * CPAN Ratings |
245
|
|
|
|
|
|
|
|
246
|
|
|
|
|
|
|
L<http://cpanratings.perl.org/d/Olson-Abbreviations> |
247
|
|
|
|
|
|
|
|
248
|
|
|
|
|
|
|
=item * Search CPAN |
249
|
|
|
|
|
|
|
|
250
|
|
|
|
|
|
|
L<http://search.cpan.org/dist/Olson-Abbreviations/> |
251
|
|
|
|
|
|
|
|
252
|
|
|
|
|
|
|
=back |
253
|
|
|
|
|
|
|
|
254
|
|
|
|
|
|
|
=head1 COPYRIGHT & LICENSE |
255
|
|
|
|
|
|
|
|
256
|
|
|
|
|
|
|
Copyright 2012 Evan Carroll, all rights reserved. |
257
|
|
|
|
|
|
|
|
258
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify it |
259
|
|
|
|
|
|
|
under the same terms as Perl itself. |
260
|
|
|
|
|
|
|
|
261
|
|
|
|
|
|
|
|
262
|
|
|
|
|
|
|
=cut |
263
|
|
|
|
|
|
|
|
264
|
|
|
|
|
|
|
1; # End of Olson::Abbreviations |