line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
=head1 NAME |
2
|
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
Time::OlsonTZ::Data - Olson timezone data |
4
|
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
=head1 SYNOPSIS |
6
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
use Time::OlsonTZ::Data qw(olson_version); |
8
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
$version = olson_version; |
10
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
use Time::OlsonTZ::Data qw( |
12
|
|
|
|
|
|
|
olson_canonical_names olson_link_names olson_all_names |
13
|
|
|
|
|
|
|
olson_links olson_country_selection); |
14
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
$names = olson_canonical_names; |
16
|
|
|
|
|
|
|
$names = olson_link_names; |
17
|
|
|
|
|
|
|
$names = olson_all_names; |
18
|
|
|
|
|
|
|
$links = olson_links; |
19
|
|
|
|
|
|
|
$countries = olson_country_selection; |
20
|
|
|
|
|
|
|
|
21
|
|
|
|
|
|
|
use Time::OlsonTZ::Data qw(olson_tzfile); |
22
|
|
|
|
|
|
|
|
23
|
|
|
|
|
|
|
$filename = olson_tzfile("America/New_York"); |
24
|
|
|
|
|
|
|
|
25
|
|
|
|
|
|
|
=head1 DESCRIPTION |
26
|
|
|
|
|
|
|
|
27
|
|
|
|
|
|
|
This module encapsulates the Olson timezone database, providing binary |
28
|
|
|
|
|
|
|
tzfiles and ancillary data. Each version of this module encapsulates |
29
|
|
|
|
|
|
|
a particular version of the timezone database. It is intended to be |
30
|
|
|
|
|
|
|
regularly updated, as the timezone database changes. |
31
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
=cut |
33
|
|
|
|
|
|
|
|
34
|
|
|
|
|
|
|
package Time::OlsonTZ::Data; |
35
|
|
|
|
|
|
|
|
36
|
8
|
|
|
8
|
|
566919
|
{ use 5.006; } |
|
8
|
|
|
|
|
94
|
|
37
|
8
|
|
|
8
|
|
46
|
use warnings; |
|
8
|
|
|
|
|
28
|
|
|
8
|
|
|
|
|
184
|
|
38
|
8
|
|
|
8
|
|
37
|
use strict; |
|
8
|
|
|
|
|
26
|
|
|
8
|
|
|
|
|
379
|
|
39
|
|
|
|
|
|
|
|
40
|
|
|
|
|
|
|
our $VERSION = "0.202302"; |
41
|
|
|
|
|
|
|
|
42
|
8
|
|
|
8
|
|
3797
|
use parent "Exporter"; |
|
8
|
|
|
|
|
2462
|
|
|
8
|
|
|
|
|
47
|
|
43
|
|
|
|
|
|
|
our @EXPORT_OK = qw( |
44
|
|
|
|
|
|
|
olson_version olson_code_version olson_data_version |
45
|
|
|
|
|
|
|
olson_canonical_names olson_link_names olson_all_names |
46
|
|
|
|
|
|
|
olson_links |
47
|
|
|
|
|
|
|
olson_country_selection |
48
|
|
|
|
|
|
|
olson_tzfile |
49
|
|
|
|
|
|
|
); |
50
|
|
|
|
|
|
|
|
51
|
|
|
|
|
|
|
my($datavol, $datadir); |
52
|
|
|
|
|
|
|
sub _data_file($) { |
53
|
1195
|
|
|
1195
|
|
1978
|
my($upath) = @_; |
54
|
1195
|
100
|
|
|
|
2166
|
unless(defined $datadir) { |
55
|
4
|
|
|
|
|
26
|
require File::Spec; |
56
|
|
|
|
|
|
|
($datavol, $datadir, undef) = |
57
|
4
|
|
|
|
|
123
|
File::Spec->splitpath($INC{"Time/OlsonTZ/Data.pm"}); |
58
|
|
|
|
|
|
|
} |
59
|
1195
|
|
|
|
|
2830
|
my @nameparts = split(/\//, $upath); |
60
|
1195
|
|
|
|
|
2195
|
my $filename = pop(@nameparts); |
61
|
1195
|
|
|
|
|
11649
|
return File::Spec->catpath($datavol, |
62
|
|
|
|
|
|
|
File::Spec->catdir($datadir, "Data", @nameparts), $filename); |
63
|
|
|
|
|
|
|
} |
64
|
|
|
|
|
|
|
|
65
|
|
|
|
|
|
|
=head1 FUNCTIONS |
66
|
|
|
|
|
|
|
|
67
|
|
|
|
|
|
|
=head2 Basic information |
68
|
|
|
|
|
|
|
|
69
|
|
|
|
|
|
|
=over |
70
|
|
|
|
|
|
|
|
71
|
|
|
|
|
|
|
=item olson_version |
72
|
|
|
|
|
|
|
|
73
|
|
|
|
|
|
|
Returns the version number of the database that this module encapsulates. |
74
|
|
|
|
|
|
|
Version numbers for the Olson database currently consist of a year number |
75
|
|
|
|
|
|
|
and a lowercase letter, such as "C<2010k>"; they are not guaranteed to |
76
|
|
|
|
|
|
|
retain this format in the future. |
77
|
|
|
|
|
|
|
|
78
|
|
|
|
|
|
|
=cut |
79
|
|
|
|
|
|
|
|
80
|
8
|
|
|
8
|
|
1725
|
use constant olson_version => "2023b"; |
|
8
|
|
|
|
|
22
|
|
|
8
|
|
|
|
|
945
|
|
81
|
|
|
|
|
|
|
|
82
|
|
|
|
|
|
|
=item olson_code_version |
83
|
|
|
|
|
|
|
|
84
|
|
|
|
|
|
|
Returns the version number of the code part of the database that this |
85
|
|
|
|
|
|
|
module encapsulates. This is now always the same as the value returned |
86
|
|
|
|
|
|
|
by L. Until late 2012 the database was distributed in |
87
|
|
|
|
|
|
|
two parts, each with their own version number, so this was a distinct |
88
|
|
|
|
|
|
|
piece of information. |
89
|
|
|
|
|
|
|
|
90
|
|
|
|
|
|
|
=cut |
91
|
|
|
|
|
|
|
|
92
|
8
|
|
|
8
|
|
63
|
use constant olson_code_version => "2023b"; |
|
8
|
|
|
|
|
17
|
|
|
8
|
|
|
|
|
510
|
|
93
|
|
|
|
|
|
|
|
94
|
|
|
|
|
|
|
=item olson_data_version |
95
|
|
|
|
|
|
|
|
96
|
|
|
|
|
|
|
Returns the version number of the data part of the database that this |
97
|
|
|
|
|
|
|
module encapsulates. This is now always the same as the value returned |
98
|
|
|
|
|
|
|
by L. Until late 2012 the database was distributed in |
99
|
|
|
|
|
|
|
two parts, each with their own version number, so this was a distinct |
100
|
|
|
|
|
|
|
piece of information. |
101
|
|
|
|
|
|
|
|
102
|
|
|
|
|
|
|
=cut |
103
|
|
|
|
|
|
|
|
104
|
8
|
|
|
8
|
|
59
|
use constant olson_data_version => "2023b"; |
|
8
|
|
|
|
|
15
|
|
|
8
|
|
|
|
|
5568
|
|
105
|
|
|
|
|
|
|
|
106
|
|
|
|
|
|
|
=back |
107
|
|
|
|
|
|
|
|
108
|
|
|
|
|
|
|
=head2 Zone metadata |
109
|
|
|
|
|
|
|
|
110
|
|
|
|
|
|
|
=over |
111
|
|
|
|
|
|
|
|
112
|
|
|
|
|
|
|
=item olson_canonical_names |
113
|
|
|
|
|
|
|
|
114
|
|
|
|
|
|
|
Returns the set of timezone names that this version of the database |
115
|
|
|
|
|
|
|
defines as canonical. These are the timezone names that are directly |
116
|
|
|
|
|
|
|
associated with a set of observance data. The return value is a reference |
117
|
|
|
|
|
|
|
to a hash, in which the keys are the canonical timezone names and the |
118
|
|
|
|
|
|
|
values are all C. |
119
|
|
|
|
|
|
|
|
120
|
|
|
|
|
|
|
=cut |
121
|
|
|
|
|
|
|
|
122
|
|
|
|
|
|
|
my $cn = q(+{ map { ($_ => undef) } qw( |
123
|
|
|
|
|
|
|
Africa/Abidjan Africa/Algiers Africa/Bissau Africa/Cairo |
124
|
|
|
|
|
|
|
Africa/Casablanca Africa/Ceuta Africa/El_Aaiun Africa/Johannesburg |
125
|
|
|
|
|
|
|
Africa/Juba Africa/Khartoum Africa/Lagos Africa/Maputo Africa/Monrovia |
126
|
|
|
|
|
|
|
Africa/Nairobi Africa/Ndjamena Africa/Sao_Tome Africa/Tripoli |
127
|
|
|
|
|
|
|
Africa/Tunis Africa/Windhoek America/Adak America/Anchorage |
128
|
|
|
|
|
|
|
America/Araguaina America/Argentina/Buenos_Aires |
129
|
|
|
|
|
|
|
America/Argentina/Catamarca America/Argentina/Cordoba |
130
|
|
|
|
|
|
|
America/Argentina/Jujuy America/Argentina/La_Rioja |
131
|
|
|
|
|
|
|
America/Argentina/Mendoza America/Argentina/Rio_Gallegos |
132
|
|
|
|
|
|
|
America/Argentina/Salta America/Argentina/San_Juan |
133
|
|
|
|
|
|
|
America/Argentina/San_Luis America/Argentina/Tucuman |
134
|
|
|
|
|
|
|
America/Argentina/Ushuaia America/Asuncion America/Bahia |
135
|
|
|
|
|
|
|
America/Bahia_Banderas America/Barbados America/Belem America/Belize |
136
|
|
|
|
|
|
|
America/Boa_Vista America/Bogota America/Boise America/Cambridge_Bay |
137
|
|
|
|
|
|
|
America/Campo_Grande America/Cancun America/Caracas America/Cayenne |
138
|
|
|
|
|
|
|
America/Chicago America/Chihuahua America/Ciudad_Juarez |
139
|
|
|
|
|
|
|
America/Costa_Rica America/Cuiaba America/Danmarkshavn America/Dawson |
140
|
|
|
|
|
|
|
America/Dawson_Creek America/Denver America/Detroit America/Edmonton |
141
|
|
|
|
|
|
|
America/Eirunepe America/El_Salvador America/Fort_Nelson |
142
|
|
|
|
|
|
|
America/Fortaleza America/Glace_Bay America/Goose_Bay America/Grand_Turk |
143
|
|
|
|
|
|
|
America/Guatemala America/Guayaquil America/Guyana America/Halifax |
144
|
|
|
|
|
|
|
America/Havana America/Hermosillo America/Indiana/Indianapolis |
145
|
|
|
|
|
|
|
America/Indiana/Knox America/Indiana/Marengo America/Indiana/Petersburg |
146
|
|
|
|
|
|
|
America/Indiana/Tell_City America/Indiana/Vevay |
147
|
|
|
|
|
|
|
America/Indiana/Vincennes America/Indiana/Winamac America/Inuvik |
148
|
|
|
|
|
|
|
America/Iqaluit America/Jamaica America/Juneau |
149
|
|
|
|
|
|
|
America/Kentucky/Louisville America/Kentucky/Monticello America/La_Paz |
150
|
|
|
|
|
|
|
America/Lima America/Los_Angeles America/Maceio America/Managua |
151
|
|
|
|
|
|
|
America/Manaus America/Martinique America/Matamoros America/Mazatlan |
152
|
|
|
|
|
|
|
America/Menominee America/Merida America/Metlakatla America/Mexico_City |
153
|
|
|
|
|
|
|
America/Miquelon America/Moncton America/Monterrey America/Montevideo |
154
|
|
|
|
|
|
|
America/New_York America/Nome America/Noronha |
155
|
|
|
|
|
|
|
America/North_Dakota/Beulah America/North_Dakota/Center |
156
|
|
|
|
|
|
|
America/North_Dakota/New_Salem America/Nuuk America/Ojinaga |
157
|
|
|
|
|
|
|
America/Panama America/Paramaribo America/Phoenix America/Port-au-Prince |
158
|
|
|
|
|
|
|
America/Porto_Velho America/Puerto_Rico America/Punta_Arenas |
159
|
|
|
|
|
|
|
America/Rankin_Inlet America/Recife America/Regina America/Resolute |
160
|
|
|
|
|
|
|
America/Rio_Branco America/Santarem America/Santiago |
161
|
|
|
|
|
|
|
America/Santo_Domingo America/Sao_Paulo America/Scoresbysund |
162
|
|
|
|
|
|
|
America/Sitka America/St_Johns America/Swift_Current America/Tegucigalpa |
163
|
|
|
|
|
|
|
America/Thule America/Tijuana America/Toronto America/Vancouver |
164
|
|
|
|
|
|
|
America/Whitehorse America/Winnipeg America/Yakutat Antarctica/Casey |
165
|
|
|
|
|
|
|
Antarctica/Davis Antarctica/Macquarie Antarctica/Mawson |
166
|
|
|
|
|
|
|
Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Asia/Almaty |
167
|
|
|
|
|
|
|
Asia/Amman Asia/Anadyr Asia/Aqtau Asia/Aqtobe Asia/Ashgabat Asia/Atyrau |
168
|
|
|
|
|
|
|
Asia/Baghdad Asia/Baku Asia/Bangkok Asia/Barnaul Asia/Beirut |
169
|
|
|
|
|
|
|
Asia/Bishkek Asia/Chita Asia/Choibalsan Asia/Colombo Asia/Damascus |
170
|
|
|
|
|
|
|
Asia/Dhaka Asia/Dili Asia/Dubai Asia/Dushanbe Asia/Famagusta Asia/Gaza |
171
|
|
|
|
|
|
|
Asia/Hebron Asia/Ho_Chi_Minh Asia/Hong_Kong Asia/Hovd Asia/Irkutsk |
172
|
|
|
|
|
|
|
Asia/Jakarta Asia/Jayapura Asia/Jerusalem Asia/Kabul Asia/Kamchatka |
173
|
|
|
|
|
|
|
Asia/Karachi Asia/Kathmandu Asia/Khandyga Asia/Kolkata Asia/Krasnoyarsk |
174
|
|
|
|
|
|
|
Asia/Kuching Asia/Macau Asia/Magadan Asia/Makassar Asia/Manila |
175
|
|
|
|
|
|
|
Asia/Nicosia Asia/Novokuznetsk Asia/Novosibirsk Asia/Omsk Asia/Oral |
176
|
|
|
|
|
|
|
Asia/Pontianak Asia/Pyongyang Asia/Qatar Asia/Qostanay Asia/Qyzylorda |
177
|
|
|
|
|
|
|
Asia/Riyadh Asia/Sakhalin Asia/Samarkand Asia/Seoul Asia/Shanghai |
178
|
|
|
|
|
|
|
Asia/Singapore Asia/Srednekolymsk Asia/Taipei Asia/Tashkent Asia/Tbilisi |
179
|
|
|
|
|
|
|
Asia/Tehran Asia/Thimphu Asia/Tokyo Asia/Tomsk Asia/Ulaanbaatar |
180
|
|
|
|
|
|
|
Asia/Urumqi Asia/Ust-Nera Asia/Vladivostok Asia/Yakutsk Asia/Yangon |
181
|
|
|
|
|
|
|
Asia/Yekaterinburg Asia/Yerevan Atlantic/Azores Atlantic/Bermuda |
182
|
|
|
|
|
|
|
Atlantic/Canary Atlantic/Cape_Verde Atlantic/Faroe Atlantic/Madeira |
183
|
|
|
|
|
|
|
Atlantic/South_Georgia Atlantic/Stanley Australia/Adelaide |
184
|
|
|
|
|
|
|
Australia/Brisbane Australia/Broken_Hill Australia/Darwin |
185
|
|
|
|
|
|
|
Australia/Eucla Australia/Hobart Australia/Lindeman Australia/Lord_Howe |
186
|
|
|
|
|
|
|
Australia/Melbourne Australia/Perth Australia/Sydney CET CST6CDT EET EST |
187
|
|
|
|
|
|
|
EST5EDT Etc/GMT Etc/GMT+1 Etc/GMT+10 Etc/GMT+11 Etc/GMT+12 Etc/GMT+2 |
188
|
|
|
|
|
|
|
Etc/GMT+3 Etc/GMT+4 Etc/GMT+5 Etc/GMT+6 Etc/GMT+7 Etc/GMT+8 Etc/GMT+9 |
189
|
|
|
|
|
|
|
Etc/GMT-1 Etc/GMT-10 Etc/GMT-11 Etc/GMT-12 Etc/GMT-13 Etc/GMT-14 |
190
|
|
|
|
|
|
|
Etc/GMT-2 Etc/GMT-3 Etc/GMT-4 Etc/GMT-5 Etc/GMT-6 Etc/GMT-7 Etc/GMT-8 |
191
|
|
|
|
|
|
|
Etc/GMT-9 Etc/UTC Europe/Andorra Europe/Astrakhan Europe/Athens |
192
|
|
|
|
|
|
|
Europe/Belgrade Europe/Berlin Europe/Brussels Europe/Bucharest |
193
|
|
|
|
|
|
|
Europe/Budapest Europe/Chisinau Europe/Dublin Europe/Gibraltar |
194
|
|
|
|
|
|
|
Europe/Helsinki Europe/Istanbul Europe/Kaliningrad Europe/Kirov |
195
|
|
|
|
|
|
|
Europe/Kyiv Europe/Lisbon Europe/London Europe/Madrid Europe/Malta |
196
|
|
|
|
|
|
|
Europe/Minsk Europe/Moscow Europe/Paris Europe/Prague Europe/Riga |
197
|
|
|
|
|
|
|
Europe/Rome Europe/Samara Europe/Saratov Europe/Simferopol Europe/Sofia |
198
|
|
|
|
|
|
|
Europe/Tallinn Europe/Tirane Europe/Ulyanovsk Europe/Vienna |
199
|
|
|
|
|
|
|
Europe/Vilnius Europe/Volgograd Europe/Warsaw Europe/Zurich Factory HST |
200
|
|
|
|
|
|
|
Indian/Chagos Indian/Maldives Indian/Mauritius MET MST MST7MDT PST8PDT |
201
|
|
|
|
|
|
|
Pacific/Apia Pacific/Auckland Pacific/Bougainville Pacific/Chatham |
202
|
|
|
|
|
|
|
Pacific/Easter Pacific/Efate Pacific/Fakaofo Pacific/Fiji |
203
|
|
|
|
|
|
|
Pacific/Galapagos Pacific/Gambier Pacific/Guadalcanal Pacific/Guam |
204
|
|
|
|
|
|
|
Pacific/Honolulu Pacific/Kanton Pacific/Kiritimati Pacific/Kosrae |
205
|
|
|
|
|
|
|
Pacific/Kwajalein Pacific/Marquesas Pacific/Nauru Pacific/Niue |
206
|
|
|
|
|
|
|
Pacific/Norfolk Pacific/Noumea Pacific/Pago_Pago Pacific/Palau |
207
|
|
|
|
|
|
|
Pacific/Pitcairn Pacific/Port_Moresby Pacific/Rarotonga Pacific/Tahiti |
208
|
|
|
|
|
|
|
Pacific/Tarawa Pacific/Tongatapu WET |
209
|
|
|
|
|
|
|
) }); |
210
|
|
|
|
|
|
|
sub olson_canonical_names() { |
211
|
1203
|
100
|
50
|
1203
|
1
|
4732
|
$cn = eval($cn) || die $@ if ref($cn) eq ""; |
212
|
1203
|
|
|
|
|
2956
|
return $cn; |
213
|
|
|
|
|
|
|
} |
214
|
|
|
|
|
|
|
|
215
|
|
|
|
|
|
|
=item olson_link_names |
216
|
|
|
|
|
|
|
|
217
|
|
|
|
|
|
|
Returns the set of timezone names that this version of the database |
218
|
|
|
|
|
|
|
defines as links. These are the timezone names that are aliases for |
219
|
|
|
|
|
|
|
other names. The return value is a reference to a hash, in which the |
220
|
|
|
|
|
|
|
keys are the link timezone names and the values are all C. |
221
|
|
|
|
|
|
|
|
222
|
|
|
|
|
|
|
=cut |
223
|
|
|
|
|
|
|
|
224
|
|
|
|
|
|
|
sub olson_links(); |
225
|
|
|
|
|
|
|
|
226
|
|
|
|
|
|
|
my $ln; |
227
|
|
|
|
|
|
|
sub olson_link_names() { |
228
|
4
|
|
100
|
4
|
1
|
177
|
return $ln ||= { map { ($_ => undef) } keys %{olson_links()} }; |
|
738
|
|
|
|
|
1326
|
|
|
3
|
|
|
|
|
11
|
|
229
|
|
|
|
|
|
|
} |
230
|
|
|
|
|
|
|
|
231
|
|
|
|
|
|
|
=item olson_all_names |
232
|
|
|
|
|
|
|
|
233
|
|
|
|
|
|
|
Returns the set of timezone names that this version of the |
234
|
|
|
|
|
|
|
database defines. These are the L and the |
235
|
|
|
|
|
|
|
L. The return value is a reference to a hash, in |
236
|
|
|
|
|
|
|
which the keys are the timezone names and the values are all C. |
237
|
|
|
|
|
|
|
|
238
|
|
|
|
|
|
|
=cut |
239
|
|
|
|
|
|
|
|
240
|
|
|
|
|
|
|
my $an; |
241
|
|
|
|
|
|
|
sub olson_all_names() { |
242
|
|
|
|
|
|
|
return $an ||= { |
243
|
2
|
|
|
|
|
7
|
%{olson_canonical_names()}, |
244
|
2
|
|
50
|
2
|
1
|
117
|
%{olson_link_names()}, |
|
2
|
|
|
|
|
7
|
|
245
|
|
|
|
|
|
|
}; |
246
|
|
|
|
|
|
|
} |
247
|
|
|
|
|
|
|
|
248
|
|
|
|
|
|
|
=item olson_links |
249
|
|
|
|
|
|
|
|
250
|
|
|
|
|
|
|
Returns details of the timezone name links in this version of the |
251
|
|
|
|
|
|
|
database. Each link defines one timezone name as an alias for some |
252
|
|
|
|
|
|
|
other timezone name. The return value is a reference to a hash, in |
253
|
|
|
|
|
|
|
which the keys are the aliases and each value is the canonical name of |
254
|
|
|
|
|
|
|
the timezone to which that alias refers. All such canonical names can |
255
|
|
|
|
|
|
|
be found in the L hash. |
256
|
|
|
|
|
|
|
|
257
|
|
|
|
|
|
|
=cut |
258
|
|
|
|
|
|
|
|
259
|
|
|
|
|
|
|
my $li = q(+{ |
260
|
|
|
|
|
|
|
"Africa/Accra" => "Africa/Abidjan", |
261
|
|
|
|
|
|
|
"Africa/Addis_Ababa" => "Africa/Nairobi", |
262
|
|
|
|
|
|
|
"Africa/Asmara" => "Africa/Nairobi", |
263
|
|
|
|
|
|
|
"Africa/Asmera" => "Africa/Nairobi", |
264
|
|
|
|
|
|
|
"Africa/Bamako" => "Africa/Abidjan", |
265
|
|
|
|
|
|
|
"Africa/Bangui" => "Africa/Lagos", |
266
|
|
|
|
|
|
|
"Africa/Banjul" => "Africa/Abidjan", |
267
|
|
|
|
|
|
|
"Africa/Blantyre" => "Africa/Maputo", |
268
|
|
|
|
|
|
|
"Africa/Brazzaville" => "Africa/Lagos", |
269
|
|
|
|
|
|
|
"Africa/Bujumbura" => "Africa/Maputo", |
270
|
|
|
|
|
|
|
"Africa/Conakry" => "Africa/Abidjan", |
271
|
|
|
|
|
|
|
"Africa/Dakar" => "Africa/Abidjan", |
272
|
|
|
|
|
|
|
"Africa/Dar_es_Salaam" => "Africa/Nairobi", |
273
|
|
|
|
|
|
|
"Africa/Djibouti" => "Africa/Nairobi", |
274
|
|
|
|
|
|
|
"Africa/Douala" => "Africa/Lagos", |
275
|
|
|
|
|
|
|
"Africa/Freetown" => "Africa/Abidjan", |
276
|
|
|
|
|
|
|
"Africa/Gaborone" => "Africa/Maputo", |
277
|
|
|
|
|
|
|
"Africa/Harare" => "Africa/Maputo", |
278
|
|
|
|
|
|
|
"Africa/Kampala" => "Africa/Nairobi", |
279
|
|
|
|
|
|
|
"Africa/Kigali" => "Africa/Maputo", |
280
|
|
|
|
|
|
|
"Africa/Kinshasa" => "Africa/Lagos", |
281
|
|
|
|
|
|
|
"Africa/Libreville" => "Africa/Lagos", |
282
|
|
|
|
|
|
|
"Africa/Lome" => "Africa/Abidjan", |
283
|
|
|
|
|
|
|
"Africa/Luanda" => "Africa/Lagos", |
284
|
|
|
|
|
|
|
"Africa/Lubumbashi" => "Africa/Maputo", |
285
|
|
|
|
|
|
|
"Africa/Lusaka" => "Africa/Maputo", |
286
|
|
|
|
|
|
|
"Africa/Malabo" => "Africa/Lagos", |
287
|
|
|
|
|
|
|
"Africa/Maseru" => "Africa/Johannesburg", |
288
|
|
|
|
|
|
|
"Africa/Mbabane" => "Africa/Johannesburg", |
289
|
|
|
|
|
|
|
"Africa/Mogadishu" => "Africa/Nairobi", |
290
|
|
|
|
|
|
|
"Africa/Niamey" => "Africa/Lagos", |
291
|
|
|
|
|
|
|
"Africa/Nouakchott" => "Africa/Abidjan", |
292
|
|
|
|
|
|
|
"Africa/Ouagadougou" => "Africa/Abidjan", |
293
|
|
|
|
|
|
|
"Africa/Porto-Novo" => "Africa/Lagos", |
294
|
|
|
|
|
|
|
"Africa/Timbuktu" => "Africa/Abidjan", |
295
|
|
|
|
|
|
|
"America/Anguilla" => "America/Puerto_Rico", |
296
|
|
|
|
|
|
|
"America/Antigua" => "America/Puerto_Rico", |
297
|
|
|
|
|
|
|
"America/Argentina/ComodRivadavia" => "America/Argentina/Catamarca", |
298
|
|
|
|
|
|
|
"America/Aruba" => "America/Puerto_Rico", |
299
|
|
|
|
|
|
|
"America/Atikokan" => "America/Panama", |
300
|
|
|
|
|
|
|
"America/Atka" => "America/Adak", |
301
|
|
|
|
|
|
|
"America/Blanc-Sablon" => "America/Puerto_Rico", |
302
|
|
|
|
|
|
|
"America/Buenos_Aires" => "America/Argentina/Buenos_Aires", |
303
|
|
|
|
|
|
|
"America/Catamarca" => "America/Argentina/Catamarca", |
304
|
|
|
|
|
|
|
"America/Cayman" => "America/Panama", |
305
|
|
|
|
|
|
|
"America/Coral_Harbour" => "America/Panama", |
306
|
|
|
|
|
|
|
"America/Cordoba" => "America/Argentina/Cordoba", |
307
|
|
|
|
|
|
|
"America/Creston" => "America/Phoenix", |
308
|
|
|
|
|
|
|
"America/Curacao" => "America/Puerto_Rico", |
309
|
|
|
|
|
|
|
"America/Dominica" => "America/Puerto_Rico", |
310
|
|
|
|
|
|
|
"America/Ensenada" => "America/Tijuana", |
311
|
|
|
|
|
|
|
"America/Fort_Wayne" => "America/Indiana/Indianapolis", |
312
|
|
|
|
|
|
|
"America/Godthab" => "America/Nuuk", |
313
|
|
|
|
|
|
|
"America/Grenada" => "America/Puerto_Rico", |
314
|
|
|
|
|
|
|
"America/Guadeloupe" => "America/Puerto_Rico", |
315
|
|
|
|
|
|
|
"America/Indianapolis" => "America/Indiana/Indianapolis", |
316
|
|
|
|
|
|
|
"America/Jujuy" => "America/Argentina/Jujuy", |
317
|
|
|
|
|
|
|
"America/Knox_IN" => "America/Indiana/Knox", |
318
|
|
|
|
|
|
|
"America/Kralendijk" => "America/Puerto_Rico", |
319
|
|
|
|
|
|
|
"America/Louisville" => "America/Kentucky/Louisville", |
320
|
|
|
|
|
|
|
"America/Lower_Princes" => "America/Puerto_Rico", |
321
|
|
|
|
|
|
|
"America/Marigot" => "America/Puerto_Rico", |
322
|
|
|
|
|
|
|
"America/Mendoza" => "America/Argentina/Mendoza", |
323
|
|
|
|
|
|
|
"America/Montreal" => "America/Toronto", |
324
|
|
|
|
|
|
|
"America/Montserrat" => "America/Puerto_Rico", |
325
|
|
|
|
|
|
|
"America/Nassau" => "America/Toronto", |
326
|
|
|
|
|
|
|
"America/Nipigon" => "America/Toronto", |
327
|
|
|
|
|
|
|
"America/Pangnirtung" => "America/Iqaluit", |
328
|
|
|
|
|
|
|
"America/Port_of_Spain" => "America/Puerto_Rico", |
329
|
|
|
|
|
|
|
"America/Porto_Acre" => "America/Rio_Branco", |
330
|
|
|
|
|
|
|
"America/Rainy_River" => "America/Winnipeg", |
331
|
|
|
|
|
|
|
"America/Rosario" => "America/Argentina/Cordoba", |
332
|
|
|
|
|
|
|
"America/Santa_Isabel" => "America/Tijuana", |
333
|
|
|
|
|
|
|
"America/Shiprock" => "America/Denver", |
334
|
|
|
|
|
|
|
"America/St_Barthelemy" => "America/Puerto_Rico", |
335
|
|
|
|
|
|
|
"America/St_Kitts" => "America/Puerto_Rico", |
336
|
|
|
|
|
|
|
"America/St_Lucia" => "America/Puerto_Rico", |
337
|
|
|
|
|
|
|
"America/St_Thomas" => "America/Puerto_Rico", |
338
|
|
|
|
|
|
|
"America/St_Vincent" => "America/Puerto_Rico", |
339
|
|
|
|
|
|
|
"America/Thunder_Bay" => "America/Toronto", |
340
|
|
|
|
|
|
|
"America/Tortola" => "America/Puerto_Rico", |
341
|
|
|
|
|
|
|
"America/Virgin" => "America/Puerto_Rico", |
342
|
|
|
|
|
|
|
"America/Yellowknife" => "America/Edmonton", |
343
|
|
|
|
|
|
|
"Antarctica/DumontDUrville" => "Pacific/Port_Moresby", |
344
|
|
|
|
|
|
|
"Antarctica/McMurdo" => "Pacific/Auckland", |
345
|
|
|
|
|
|
|
"Antarctica/South_Pole" => "Pacific/Auckland", |
346
|
|
|
|
|
|
|
"Antarctica/Syowa" => "Asia/Riyadh", |
347
|
|
|
|
|
|
|
"Antarctica/Vostok" => "Asia/Urumqi", |
348
|
|
|
|
|
|
|
"Arctic/Longyearbyen" => "Europe/Berlin", |
349
|
|
|
|
|
|
|
"Asia/Aden" => "Asia/Riyadh", |
350
|
|
|
|
|
|
|
"Asia/Ashkhabad" => "Asia/Ashgabat", |
351
|
|
|
|
|
|
|
"Asia/Bahrain" => "Asia/Qatar", |
352
|
|
|
|
|
|
|
"Asia/Brunei" => "Asia/Kuching", |
353
|
|
|
|
|
|
|
"Asia/Calcutta" => "Asia/Kolkata", |
354
|
|
|
|
|
|
|
"Asia/Chongqing" => "Asia/Shanghai", |
355
|
|
|
|
|
|
|
"Asia/Chungking" => "Asia/Shanghai", |
356
|
|
|
|
|
|
|
"Asia/Dacca" => "Asia/Dhaka", |
357
|
|
|
|
|
|
|
"Asia/Harbin" => "Asia/Shanghai", |
358
|
|
|
|
|
|
|
"Asia/Istanbul" => "Europe/Istanbul", |
359
|
|
|
|
|
|
|
"Asia/Kashgar" => "Asia/Urumqi", |
360
|
|
|
|
|
|
|
"Asia/Katmandu" => "Asia/Kathmandu", |
361
|
|
|
|
|
|
|
"Asia/Kuala_Lumpur" => "Asia/Singapore", |
362
|
|
|
|
|
|
|
"Asia/Kuwait" => "Asia/Riyadh", |
363
|
|
|
|
|
|
|
"Asia/Macao" => "Asia/Macau", |
364
|
|
|
|
|
|
|
"Asia/Muscat" => "Asia/Dubai", |
365
|
|
|
|
|
|
|
"Asia/Phnom_Penh" => "Asia/Bangkok", |
366
|
|
|
|
|
|
|
"Asia/Rangoon" => "Asia/Yangon", |
367
|
|
|
|
|
|
|
"Asia/Saigon" => "Asia/Ho_Chi_Minh", |
368
|
|
|
|
|
|
|
"Asia/Tel_Aviv" => "Asia/Jerusalem", |
369
|
|
|
|
|
|
|
"Asia/Thimbu" => "Asia/Thimphu", |
370
|
|
|
|
|
|
|
"Asia/Ujung_Pandang" => "Asia/Makassar", |
371
|
|
|
|
|
|
|
"Asia/Ulan_Bator" => "Asia/Ulaanbaatar", |
372
|
|
|
|
|
|
|
"Asia/Vientiane" => "Asia/Bangkok", |
373
|
|
|
|
|
|
|
"Atlantic/Faeroe" => "Atlantic/Faroe", |
374
|
|
|
|
|
|
|
"Atlantic/Jan_Mayen" => "Europe/Berlin", |
375
|
|
|
|
|
|
|
"Atlantic/Reykjavik" => "Africa/Abidjan", |
376
|
|
|
|
|
|
|
"Atlantic/St_Helena" => "Africa/Abidjan", |
377
|
|
|
|
|
|
|
"Australia/ACT" => "Australia/Sydney", |
378
|
|
|
|
|
|
|
"Australia/Canberra" => "Australia/Sydney", |
379
|
|
|
|
|
|
|
"Australia/Currie" => "Australia/Hobart", |
380
|
|
|
|
|
|
|
"Australia/LHI" => "Australia/Lord_Howe", |
381
|
|
|
|
|
|
|
"Australia/NSW" => "Australia/Sydney", |
382
|
|
|
|
|
|
|
"Australia/North" => "Australia/Darwin", |
383
|
|
|
|
|
|
|
"Australia/Queensland" => "Australia/Brisbane", |
384
|
|
|
|
|
|
|
"Australia/South" => "Australia/Adelaide", |
385
|
|
|
|
|
|
|
"Australia/Tasmania" => "Australia/Hobart", |
386
|
|
|
|
|
|
|
"Australia/Victoria" => "Australia/Melbourne", |
387
|
|
|
|
|
|
|
"Australia/West" => "Australia/Perth", |
388
|
|
|
|
|
|
|
"Australia/Yancowinna" => "Australia/Broken_Hill", |
389
|
|
|
|
|
|
|
"Brazil/Acre" => "America/Rio_Branco", |
390
|
|
|
|
|
|
|
"Brazil/DeNoronha" => "America/Noronha", |
391
|
|
|
|
|
|
|
"Brazil/East" => "America/Sao_Paulo", |
392
|
|
|
|
|
|
|
"Brazil/West" => "America/Manaus", |
393
|
|
|
|
|
|
|
"Canada/Atlantic" => "America/Halifax", |
394
|
|
|
|
|
|
|
"Canada/Central" => "America/Winnipeg", |
395
|
|
|
|
|
|
|
"Canada/Eastern" => "America/Toronto", |
396
|
|
|
|
|
|
|
"Canada/Mountain" => "America/Edmonton", |
397
|
|
|
|
|
|
|
"Canada/Newfoundland" => "America/St_Johns", |
398
|
|
|
|
|
|
|
"Canada/Pacific" => "America/Vancouver", |
399
|
|
|
|
|
|
|
"Canada/Saskatchewan" => "America/Regina", |
400
|
|
|
|
|
|
|
"Canada/Yukon" => "America/Whitehorse", |
401
|
|
|
|
|
|
|
"Chile/Continental" => "America/Santiago", |
402
|
|
|
|
|
|
|
"Chile/EasterIsland" => "Pacific/Easter", |
403
|
|
|
|
|
|
|
Cuba => "America/Havana", |
404
|
|
|
|
|
|
|
Egypt => "Africa/Cairo", |
405
|
|
|
|
|
|
|
Eire => "Europe/Dublin", |
406
|
|
|
|
|
|
|
"Etc/GMT+0" => "Etc/GMT", |
407
|
|
|
|
|
|
|
"Etc/GMT-0" => "Etc/GMT", |
408
|
|
|
|
|
|
|
"Etc/GMT0" => "Etc/GMT", |
409
|
|
|
|
|
|
|
"Etc/Greenwich" => "Etc/GMT", |
410
|
|
|
|
|
|
|
"Etc/UCT" => "Etc/UTC", |
411
|
|
|
|
|
|
|
"Etc/Universal" => "Etc/UTC", |
412
|
|
|
|
|
|
|
"Etc/Zulu" => "Etc/UTC", |
413
|
|
|
|
|
|
|
"Europe/Amsterdam" => "Europe/Brussels", |
414
|
|
|
|
|
|
|
"Europe/Belfast" => "Europe/London", |
415
|
|
|
|
|
|
|
"Europe/Bratislava" => "Europe/Prague", |
416
|
|
|
|
|
|
|
"Europe/Busingen" => "Europe/Zurich", |
417
|
|
|
|
|
|
|
"Europe/Copenhagen" => "Europe/Berlin", |
418
|
|
|
|
|
|
|
"Europe/Guernsey" => "Europe/London", |
419
|
|
|
|
|
|
|
"Europe/Isle_of_Man" => "Europe/London", |
420
|
|
|
|
|
|
|
"Europe/Jersey" => "Europe/London", |
421
|
|
|
|
|
|
|
"Europe/Kiev" => "Europe/Kyiv", |
422
|
|
|
|
|
|
|
"Europe/Ljubljana" => "Europe/Belgrade", |
423
|
|
|
|
|
|
|
"Europe/Luxembourg" => "Europe/Brussels", |
424
|
|
|
|
|
|
|
"Europe/Mariehamn" => "Europe/Helsinki", |
425
|
|
|
|
|
|
|
"Europe/Monaco" => "Europe/Paris", |
426
|
|
|
|
|
|
|
"Europe/Nicosia" => "Asia/Nicosia", |
427
|
|
|
|
|
|
|
"Europe/Oslo" => "Europe/Berlin", |
428
|
|
|
|
|
|
|
"Europe/Podgorica" => "Europe/Belgrade", |
429
|
|
|
|
|
|
|
"Europe/San_Marino" => "Europe/Rome", |
430
|
|
|
|
|
|
|
"Europe/Sarajevo" => "Europe/Belgrade", |
431
|
|
|
|
|
|
|
"Europe/Skopje" => "Europe/Belgrade", |
432
|
|
|
|
|
|
|
"Europe/Stockholm" => "Europe/Berlin", |
433
|
|
|
|
|
|
|
"Europe/Tiraspol" => "Europe/Chisinau", |
434
|
|
|
|
|
|
|
"Europe/Uzhgorod" => "Europe/Kyiv", |
435
|
|
|
|
|
|
|
"Europe/Vaduz" => "Europe/Zurich", |
436
|
|
|
|
|
|
|
"Europe/Vatican" => "Europe/Rome", |
437
|
|
|
|
|
|
|
"Europe/Zagreb" => "Europe/Belgrade", |
438
|
|
|
|
|
|
|
"Europe/Zaporozhye" => "Europe/Kyiv", |
439
|
|
|
|
|
|
|
GB => "Europe/London", |
440
|
|
|
|
|
|
|
"GB-Eire" => "Europe/London", |
441
|
|
|
|
|
|
|
GMT => "Etc/GMT", |
442
|
|
|
|
|
|
|
"GMT+0" => "Etc/GMT", |
443
|
|
|
|
|
|
|
"GMT-0" => "Etc/GMT", |
444
|
|
|
|
|
|
|
GMT0 => "Etc/GMT", |
445
|
|
|
|
|
|
|
Greenwich => "Etc/GMT", |
446
|
|
|
|
|
|
|
Hongkong => "Asia/Hong_Kong", |
447
|
|
|
|
|
|
|
Iceland => "Africa/Abidjan", |
448
|
|
|
|
|
|
|
"Indian/Antananarivo" => "Africa/Nairobi", |
449
|
|
|
|
|
|
|
"Indian/Christmas" => "Asia/Bangkok", |
450
|
|
|
|
|
|
|
"Indian/Cocos" => "Asia/Yangon", |
451
|
|
|
|
|
|
|
"Indian/Comoro" => "Africa/Nairobi", |
452
|
|
|
|
|
|
|
"Indian/Kerguelen" => "Indian/Maldives", |
453
|
|
|
|
|
|
|
"Indian/Mahe" => "Asia/Dubai", |
454
|
|
|
|
|
|
|
"Indian/Mayotte" => "Africa/Nairobi", |
455
|
|
|
|
|
|
|
"Indian/Reunion" => "Asia/Dubai", |
456
|
|
|
|
|
|
|
Iran => "Asia/Tehran", |
457
|
|
|
|
|
|
|
Israel => "Asia/Jerusalem", |
458
|
|
|
|
|
|
|
Jamaica => "America/Jamaica", |
459
|
|
|
|
|
|
|
Japan => "Asia/Tokyo", |
460
|
|
|
|
|
|
|
Kwajalein => "Pacific/Kwajalein", |
461
|
|
|
|
|
|
|
Libya => "Africa/Tripoli", |
462
|
|
|
|
|
|
|
"Mexico/BajaNorte" => "America/Tijuana", |
463
|
|
|
|
|
|
|
"Mexico/BajaSur" => "America/Mazatlan", |
464
|
|
|
|
|
|
|
"Mexico/General" => "America/Mexico_City", |
465
|
|
|
|
|
|
|
NZ => "Pacific/Auckland", |
466
|
|
|
|
|
|
|
"NZ-CHAT" => "Pacific/Chatham", |
467
|
|
|
|
|
|
|
Navajo => "America/Denver", |
468
|
|
|
|
|
|
|
PRC => "Asia/Shanghai", |
469
|
|
|
|
|
|
|
"Pacific/Chuuk" => "Pacific/Port_Moresby", |
470
|
|
|
|
|
|
|
"Pacific/Enderbury" => "Pacific/Kanton", |
471
|
|
|
|
|
|
|
"Pacific/Funafuti" => "Pacific/Tarawa", |
472
|
|
|
|
|
|
|
"Pacific/Johnston" => "Pacific/Honolulu", |
473
|
|
|
|
|
|
|
"Pacific/Majuro" => "Pacific/Tarawa", |
474
|
|
|
|
|
|
|
"Pacific/Midway" => "Pacific/Pago_Pago", |
475
|
|
|
|
|
|
|
"Pacific/Pohnpei" => "Pacific/Guadalcanal", |
476
|
|
|
|
|
|
|
"Pacific/Ponape" => "Pacific/Guadalcanal", |
477
|
|
|
|
|
|
|
"Pacific/Saipan" => "Pacific/Guam", |
478
|
|
|
|
|
|
|
"Pacific/Samoa" => "Pacific/Pago_Pago", |
479
|
|
|
|
|
|
|
"Pacific/Truk" => "Pacific/Port_Moresby", |
480
|
|
|
|
|
|
|
"Pacific/Wake" => "Pacific/Tarawa", |
481
|
|
|
|
|
|
|
"Pacific/Wallis" => "Pacific/Tarawa", |
482
|
|
|
|
|
|
|
"Pacific/Yap" => "Pacific/Port_Moresby", |
483
|
|
|
|
|
|
|
Poland => "Europe/Warsaw", |
484
|
|
|
|
|
|
|
Portugal => "Europe/Lisbon", |
485
|
|
|
|
|
|
|
ROC => "Asia/Taipei", |
486
|
|
|
|
|
|
|
ROK => "Asia/Seoul", |
487
|
|
|
|
|
|
|
Singapore => "Asia/Singapore", |
488
|
|
|
|
|
|
|
Turkey => "Europe/Istanbul", |
489
|
|
|
|
|
|
|
UCT => "Etc/UTC", |
490
|
|
|
|
|
|
|
"US/Alaska" => "America/Anchorage", |
491
|
|
|
|
|
|
|
"US/Aleutian" => "America/Adak", |
492
|
|
|
|
|
|
|
"US/Arizona" => "America/Phoenix", |
493
|
|
|
|
|
|
|
"US/Central" => "America/Chicago", |
494
|
|
|
|
|
|
|
"US/East-Indiana" => "America/Indiana/Indianapolis", |
495
|
|
|
|
|
|
|
"US/Eastern" => "America/New_York", |
496
|
|
|
|
|
|
|
"US/Hawaii" => "Pacific/Honolulu", |
497
|
|
|
|
|
|
|
"US/Indiana-Starke" => "America/Indiana/Knox", |
498
|
|
|
|
|
|
|
"US/Michigan" => "America/Detroit", |
499
|
|
|
|
|
|
|
"US/Mountain" => "America/Denver", |
500
|
|
|
|
|
|
|
"US/Pacific" => "America/Los_Angeles", |
501
|
|
|
|
|
|
|
"US/Samoa" => "Pacific/Pago_Pago", |
502
|
|
|
|
|
|
|
UTC => "Etc/UTC", |
503
|
|
|
|
|
|
|
Universal => "Etc/UTC", |
504
|
|
|
|
|
|
|
"W-SU" => "Europe/Moscow", |
505
|
|
|
|
|
|
|
Zulu => "Etc/UTC", |
506
|
|
|
|
|
|
|
}); |
507
|
|
|
|
|
|
|
sub olson_links() { |
508
|
1448
|
100
|
50
|
1448
|
1
|
8207
|
$li = eval($li) || die $@ if ref($li) eq ""; |
509
|
1448
|
|
|
|
|
3477
|
return $li; |
510
|
|
|
|
|
|
|
} |
511
|
|
|
|
|
|
|
|
512
|
|
|
|
|
|
|
=item olson_country_selection |
513
|
|
|
|
|
|
|
|
514
|
|
|
|
|
|
|
Returns information about how timezones relate to countries, intended |
515
|
|
|
|
|
|
|
to aid humans in selecting a geographical timezone. This information |
516
|
|
|
|
|
|
|
is derived from the C and C files in the database |
517
|
|
|
|
|
|
|
source. |
518
|
|
|
|
|
|
|
|
519
|
|
|
|
|
|
|
The return value is a reference to a hash, keyed by (ISO 3166 alpha-2 |
520
|
|
|
|
|
|
|
uppercase) country code. The value for each country is a hash containing |
521
|
|
|
|
|
|
|
these values: |
522
|
|
|
|
|
|
|
|
523
|
|
|
|
|
|
|
=over |
524
|
|
|
|
|
|
|
|
525
|
|
|
|
|
|
|
=item B |
526
|
|
|
|
|
|
|
|
527
|
|
|
|
|
|
|
The ISO 3166 alpha-2 uppercase country code. |
528
|
|
|
|
|
|
|
|
529
|
|
|
|
|
|
|
=item B |
530
|
|
|
|
|
|
|
|
531
|
|
|
|
|
|
|
An English name for the country, possibly in a modified form, optimised |
532
|
|
|
|
|
|
|
to help humans find the right entry in alphabetical lists. This is |
533
|
|
|
|
|
|
|
not necessarily identical to the country's standard short or long name. |
534
|
|
|
|
|
|
|
(For other forms of the name, consult a database of countries, keying |
535
|
|
|
|
|
|
|
by the country code.) |
536
|
|
|
|
|
|
|
|
537
|
|
|
|
|
|
|
=item B |
538
|
|
|
|
|
|
|
|
539
|
|
|
|
|
|
|
Information about the regions of the country that use distinct |
540
|
|
|
|
|
|
|
timezones. This is a hash, keyed by English description of the region. |
541
|
|
|
|
|
|
|
The description is empty if there is only one region. The value for |
542
|
|
|
|
|
|
|
each region is a hash containing these values: |
543
|
|
|
|
|
|
|
|
544
|
|
|
|
|
|
|
=over |
545
|
|
|
|
|
|
|
|
546
|
|
|
|
|
|
|
=item B |
547
|
|
|
|
|
|
|
|
548
|
|
|
|
|
|
|
Brief English description of the region, used to distinguish between |
549
|
|
|
|
|
|
|
the regions of a single country. Empty string if the country has only |
550
|
|
|
|
|
|
|
one region for timezone purposes. (This is the same string used as the |
551
|
|
|
|
|
|
|
key in the B hash.) |
552
|
|
|
|
|
|
|
|
553
|
|
|
|
|
|
|
=item B |
554
|
|
|
|
|
|
|
|
555
|
|
|
|
|
|
|
Name of the Olson timezone used in this region. The named timezone is |
556
|
|
|
|
|
|
|
guaranteed to exist in the database, but not necessarily as a canonical |
557
|
|
|
|
|
|
|
name (it may be a link). Typically, where there are aliases or identical |
558
|
|
|
|
|
|
|
canonical zones, a name is chosen that refers to a location in the |
559
|
|
|
|
|
|
|
country of interest. |
560
|
|
|
|
|
|
|
|
561
|
|
|
|
|
|
|
=item B |
562
|
|
|
|
|
|
|
|
563
|
|
|
|
|
|
|
Geographical coordinates of some point within the location referred to in |
564
|
|
|
|
|
|
|
the timezone name. This is a latitude and longitude, in ISO 6709 format. |
565
|
|
|
|
|
|
|
|
566
|
|
|
|
|
|
|
=back |
567
|
|
|
|
|
|
|
|
568
|
|
|
|
|
|
|
=back |
569
|
|
|
|
|
|
|
|
570
|
|
|
|
|
|
|
This data structure is intended to help a human select the appropriate |
571
|
|
|
|
|
|
|
timezone based on political geography, specifically working from a |
572
|
|
|
|
|
|
|
selection of country. It is of essentially no use for any other purpose. |
573
|
|
|
|
|
|
|
It is not strictly guaranteed that every geographical timezone in the |
574
|
|
|
|
|
|
|
database is listed somewhere in this structure, so it is of limited use |
575
|
|
|
|
|
|
|
in providing information about an already-selected timezone. It does |
576
|
|
|
|
|
|
|
not include non-geographic timezones at all. It also does not claim |
577
|
|
|
|
|
|
|
to be a comprehensive list of countries, and does not make any claims |
578
|
|
|
|
|
|
|
regarding the political status of any entity listed: the "country" |
579
|
|
|
|
|
|
|
classification is loose, and used only for identification purposes. |
580
|
|
|
|
|
|
|
|
581
|
|
|
|
|
|
|
=cut |
582
|
|
|
|
|
|
|
|
583
|
|
|
|
|
|
|
my $cs; |
584
|
|
|
|
|
|
|
sub olson_country_selection() { |
585
|
1
|
|
33
|
1
|
1
|
10
|
return $cs ||= do { |
586
|
1
|
|
|
|
|
4
|
my $fn = _data_file("country_selection.tzp"); |
587
|
1
|
0
|
|
|
|
3
|
$@ = ""; do($fn) || die($@ eq "" ? "$fn: $!" : $@); |
|
1
|
50
|
|
|
|
793
|
|
588
|
|
|
|
|
|
|
} |
589
|
|
|
|
|
|
|
} |
590
|
|
|
|
|
|
|
|
591
|
|
|
|
|
|
|
=back |
592
|
|
|
|
|
|
|
|
593
|
|
|
|
|
|
|
=head2 Zone data |
594
|
|
|
|
|
|
|
|
595
|
|
|
|
|
|
|
=over |
596
|
|
|
|
|
|
|
|
597
|
|
|
|
|
|
|
=item olson_tzfile(NAME) |
598
|
|
|
|
|
|
|
|
599
|
|
|
|
|
|
|
Returns the pathname of the binary tzfile (in L format) |
600
|
|
|
|
|
|
|
describing the timezone named I in the Olson database. Cs if |
601
|
|
|
|
|
|
|
the name does not exist in this version of the database. The tzfile |
602
|
|
|
|
|
|
|
is of at least version 2 of the format, and so does not suffer a Y2038 |
603
|
|
|
|
|
|
|
(32-bit time_t) problem. |
604
|
|
|
|
|
|
|
|
605
|
|
|
|
|
|
|
=cut |
606
|
|
|
|
|
|
|
|
607
|
|
|
|
|
|
|
sub olson_tzfile($) { |
608
|
1197
|
|
|
1197
|
1
|
75832
|
my($tzname) = @_; |
609
|
1197
|
100
|
|
|
|
2250
|
$tzname = olson_links()->{$tzname} if exists olson_links()->{$tzname}; |
610
|
1197
|
100
|
|
|
|
2093
|
unless(exists olson_canonical_names()->{$tzname}) { |
611
|
3
|
|
|
|
|
34
|
require Carp; |
612
|
3
|
|
|
|
|
10
|
Carp::croak("no such timezone `$tzname' ". |
613
|
3
|
|
|
|
|
443
|
"in the Olson @{[olson_version]} database"); |
614
|
|
|
|
|
|
|
} |
615
|
1194
|
|
|
|
|
3337
|
return _data_file($tzname.".tz"); |
616
|
|
|
|
|
|
|
} |
617
|
|
|
|
|
|
|
|
618
|
|
|
|
|
|
|
=back |
619
|
|
|
|
|
|
|
|
620
|
|
|
|
|
|
|
=head1 BUGS |
621
|
|
|
|
|
|
|
|
622
|
|
|
|
|
|
|
The Olson timezone database probably contains errors in the older |
623
|
|
|
|
|
|
|
historical data. These will be corrected, as they are discovered, |
624
|
|
|
|
|
|
|
in future versions of the database. |
625
|
|
|
|
|
|
|
|
626
|
|
|
|
|
|
|
Because legislatures commonly change civil timezone rules, in |
627
|
|
|
|
|
|
|
unpredictable ways and often with little advance notice, the current |
628
|
|
|
|
|
|
|
timezone data is liable to get out of date quite quickly. The Olson |
629
|
|
|
|
|
|
|
timezone database is frequently updated to keep it accurate for current |
630
|
|
|
|
|
|
|
dates. Frequently updating installations of this module from CPAN should |
631
|
|
|
|
|
|
|
keep it similarly accurate. |
632
|
|
|
|
|
|
|
|
633
|
|
|
|
|
|
|
For the same reason, the future data in the database is liable to be |
634
|
|
|
|
|
|
|
very inaccurate. The database includes, for each timezone, the current |
635
|
|
|
|
|
|
|
best guess regarding its future behaviour, usually consisting of the |
636
|
|
|
|
|
|
|
current rules being left unchanged indefinitely. (In most cases it is |
637
|
|
|
|
|
|
|
unlikely that the rules will actually never be changed, but the current |
638
|
|
|
|
|
|
|
rules still constitute the best guess available of future behaviour.) |
639
|
|
|
|
|
|
|
|
640
|
|
|
|
|
|
|
Because this module is intended to be frequently updated, long-running |
641
|
|
|
|
|
|
|
programs (such as clock displays) will experience the module being |
642
|
|
|
|
|
|
|
updated while in use. This can happen with any module, but is of |
643
|
|
|
|
|
|
|
particular interest with this one. The behaviour in this situation is |
644
|
|
|
|
|
|
|
not guaranteed, but here is a guide to current behaviour. The running |
645
|
|
|
|
|
|
|
module code is of course not influenced by the C<.pm> file changing. |
646
|
|
|
|
|
|
|
The ancillary data is all currently stored in the module code, and so |
647
|
|
|
|
|
|
|
will be equally unaffected. Tzfiles pointed to by the module, however, |
648
|
|
|
|
|
|
|
will change visibly. Newly reading a tzfile is liable to see a newer |
649
|
|
|
|
|
|
|
version of the zone's data than the module's metadata suggests. A tzfile |
650
|
|
|
|
|
|
|
could also theoretically disappear, if a zone's canonical name changes |
651
|
|
|
|
|
|
|
(so the former canonical name becomes a link). To avoid weirdness, |
652
|
|
|
|
|
|
|
it is recommended to read in all required tzfiles near the start of |
653
|
|
|
|
|
|
|
a program's run, so that it doesn't matter if the files subsequently |
654
|
|
|
|
|
|
|
change due to an update. |
655
|
|
|
|
|
|
|
|
656
|
|
|
|
|
|
|
=head1 SEE ALSO |
657
|
|
|
|
|
|
|
|
658
|
|
|
|
|
|
|
L, |
659
|
|
|
|
|
|
|
L, |
660
|
|
|
|
|
|
|
L, |
661
|
|
|
|
|
|
|
L, |
662
|
|
|
|
|
|
|
L |
663
|
|
|
|
|
|
|
|
664
|
|
|
|
|
|
|
=head1 AUTHOR |
665
|
|
|
|
|
|
|
|
666
|
|
|
|
|
|
|
The Olson timezone database was compiled by Arthur David Olson, Paul |
667
|
|
|
|
|
|
|
Eggert, and many others. It is maintained by the denizens of the mailing |
668
|
|
|
|
|
|
|
list (formerly ). |
669
|
|
|
|
|
|
|
|
670
|
|
|
|
|
|
|
The C Perl module wrapper for the database was |
671
|
|
|
|
|
|
|
developed by Andrew Main (Zefram) . |
672
|
|
|
|
|
|
|
|
673
|
|
|
|
|
|
|
=head1 COPYRIGHT |
674
|
|
|
|
|
|
|
|
675
|
|
|
|
|
|
|
The Olson timezone database is is the public domain. |
676
|
|
|
|
|
|
|
|
677
|
|
|
|
|
|
|
The C Perl module wrapper for the database is |
678
|
|
|
|
|
|
|
Copyright (C) 2010, 2011, 2012, 2013, 2014, 2017, 2018, 2019, 2020, 2021, 2022, 2023 |
679
|
|
|
|
|
|
|
Andrew Main (Zefram) . |
680
|
|
|
|
|
|
|
|
681
|
|
|
|
|
|
|
=head1 LICENSE |
682
|
|
|
|
|
|
|
|
683
|
|
|
|
|
|
|
No license is required to do anything with public domain materials. |
684
|
|
|
|
|
|
|
|
685
|
|
|
|
|
|
|
This module is free software; you can redistribute it and/or modify it |
686
|
|
|
|
|
|
|
under the same terms as Perl itself. |
687
|
|
|
|
|
|
|
|
688
|
|
|
|
|
|
|
=cut |
689
|
|
|
|
|
|
|
|
690
|
|
|
|
|
|
|
1; |