← Index
NYTProf Performance Profile   « line view »
For ./view
  Run on Fri Jul 31 19:05:14 2015
Reported on Fri Jul 31 19:08:10 2015

Filename/usr/share/perl5/vendor_perl/Time/Timezone.pm
StatementsExecuted 24 statements in 1.13ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11114µs37µsTime::Timezone::::BEGIN@10Time::Timezone::BEGIN@10
11113µs46µsTime::Timezone::::BEGIN@110Time::Timezone::BEGIN@110
11110µs24µsTime::Timezone::::BEGIN@23Time::Timezone::BEGIN@23
1119µs27µsTime::Timezone::::BEGIN@15Time::Timezone::BEGIN@15
1118µs19µsTime::Timezone::::BEGIN@11Time::Timezone::BEGIN@11
0000s0sTime::Timezone::::calc_offTime::Timezone::calc_off
0000s0sTime::Timezone::::tz2zoneTime::Timezone::tz2zone
0000s0sTime::Timezone::::tz_local_offsetTime::Timezone::tz_local_offset
0000s0sTime::Timezone::::tz_nameTime::Timezone::tz_name
0000s0sTime::Timezone::::tz_offsetTime::Timezone::tz_offset
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Time::Timezone;
2
3114µsrequire 5.002;
4
51400nsrequire Exporter;
617µs@ISA = qw(Exporter);
711µs@EXPORT = qw(tz2zone tz_local_offset tz_offset tz_name);
81200ns@EXPORT_OK = qw();
9
10226µs260µs
# spent 37µs (14+23) within Time::Timezone::BEGIN@10 which was called: # once (14µs+23µs) by Time::ParseDate::BEGIN@6 at line 10
use Carp;
# spent 37µs making 1 call to Time::Timezone::BEGIN@10 # spent 23µs making 1 call to Exporter::import
11227µs230µs
# spent 19µs (8+11) within Time::Timezone::BEGIN@11 which was called: # once (8µs+11µs) by Time::ParseDate::BEGIN@6 at line 11
use strict;
# spent 19µs making 1 call to Time::Timezone::BEGIN@11 # spent 11µs making 1 call to strict::import
12
13# Parts stolen from code by Paul Foley <paul@ascent.com>
14
15250µs245µs
# spent 27µs (9+18) within Time::Timezone::BEGIN@15 which was called: # once (9µs+18µs) by Time::ParseDate::BEGIN@6 at line 15
use vars qw($VERSION);
# spent 27µs making 1 call to Time::Timezone::BEGIN@15 # spent 18µs making 1 call to vars::import
16
171200ns$VERSION = 2006.0814;
18
19sub tz2zone
20{
21 my($TZ, $time, $isdst) = @_;
22
232320µs239µs
# spent 24µs (10+15) within Time::Timezone::BEGIN@23 which was called: # once (10µs+15µs) by Time::ParseDate::BEGIN@6 at line 23
use vars qw(%tzn_cache);
# spent 24µs making 1 call to Time::Timezone::BEGIN@23 # spent 15µs making 1 call to vars::import
24
25 $TZ = defined($ENV{'TZ'}) ? ( $ENV{'TZ'} ? $ENV{'TZ'} : 'GMT' ) : ''
26 unless $TZ;
27
28 # Hack to deal with 'PST8PDT' format of TZ
29 # Note that this can't deal with all the esoteric forms, but it
30 # does recognize the most common: [:]STDoff[DST[off][,rule]]
31
32 if (! defined $isdst) {
33 my $j;
34 $time = time() unless $time;
35 ($j, $j, $j, $j, $j, $j, $j, $j, $isdst) = localtime($time);
36 }
37
38 if (defined $tzn_cache{$TZ}->[$isdst]) {
39 return $tzn_cache{$TZ}->[$isdst];
40 }
41
42 if ($TZ =~ /^
43 ( [^:\d+\-,] {3,} )
44 ( [+-] ?
45 \d {1,2}
46 ( : \d {1,2} ) {0,2}
47 )
48 ( [^\d+\-,] {3,} )?
49 /x
50 ) {
51 $TZ = $isdst ? $4 : $1;
52 $tzn_cache{$TZ} = [ $1, $4 ];
53 } else {
54 $tzn_cache{$TZ} = [ $TZ, $TZ ];
55 }
56 return $TZ;
57}
58
59sub tz_local_offset
60{
61 my ($time) = @_;
62
63 $time = time() unless $time;
64
65 return &calc_off($time);
66}
67
68sub calc_off
69{
70 my ($time) = @_;
71
72 my (@l) = localtime($time);
73 my (@g) = gmtime($time);
74
75 my $off;
76
77 $off = $l[0] - $g[0]
78 + ($l[1] - $g[1]) * 60
79 + ($l[2] - $g[2]) * 3600;
80
81 # subscript 7 is yday.
82
83 if ($l[7] == $g[7]) {
84 # done
85 } elsif ($l[7] == $g[7] + 1) {
86 $off += 86400;
87 } elsif ($l[7] == $g[7] - 1) {
88 $off -= 86400;
89 } elsif ($l[7] < $g[7]) {
90 # crossed over a year boundary!
91 # localtime is beginning of year, gmt is end
92 # therefore local is ahead
93 $off += 86400;
94 } else {
95 $off -= 86400;
96 }
97
98 return $off;
99}
100
101# constants
102# The rest of the file originally comes from Graham Barr <bodg@tiuk.ti.com>
103#
104# Some references:
105# http://www.weltzeituhr.com/laender/zeitzonen_e.shtml
106# http://www.worldtimezone.com/wtz-names/timezonenames.html
107# http://www.timegenie.com/timezones.php
108
10916µs133µsCONFIG: {
# spent 33µs making 1 call to vars::import
1102577µs146µs
# spent 46µs (13+33) within Time::Timezone::BEGIN@110 which was called: # once (13µs+33µs) by Time::ParseDate::BEGIN@6 at line 110
use vars qw(%dstZone %zoneOff %dstZoneOff %Zone);
# spent 46µs making 1 call to Time::Timezone::BEGIN@110
111
11218µs %dstZone = (
113 "brst" => -2*3600, # Brazil Summer Time (East Daylight)
114 "adt" => -3*3600, # Atlantic Daylight
115 "edt" => -4*3600, # Eastern Daylight
116 "cdt" => -5*3600, # Central Daylight
117 "mdt" => -6*3600, # Mountain Daylight
118 "pdt" => -7*3600, # Pacific Daylight
119 "ydt" => -8*3600, # Yukon Daylight
120 "hdt" => -9*3600, # Hawaii Daylight
121 "bst" => +1*3600, # British Summer
122 "mest" => +2*3600, # Middle European Summer
123 "met dst" => +2*3600, # Middle European Summer
124 "sst" => +2*3600, # Swedish Summer
125 "fst" => +2*3600, # French Summer
126 "eest" => +3*3600, # Eastern European Summer
127 "cest" => +2*3600, # Central European Daylight
128 "wadt" => +8*3600, # West Australian Daylight
129 "kdt" => +10*3600, # Korean Daylight
130 # "cadt" => +10*3600+1800, # Central Australian Daylight
131 "eadt" => +11*3600, # Eastern Australian Daylight
132 "nzdt" => +13*3600, # New Zealand Daylight
133 );
134
135 # not included due to ambiguity:
136 # IST Indian Standard Time +5.5
137 # Ireland Standard Time 0
138 # Israel Standard Time +2
139 # IDT Ireland Daylight Time +1
140 # Israel Daylight Time +3
141 # AMST Amazon Standard Time / -3
142 # Armenia Standard Time +8
143 # BST Brazil Standard -3
144
145131µs %Zone = (
146 "gmt" => 0, # Greenwich Mean
147 "ut" => 0, # Universal (Coordinated)
148 "utc" => 0,
149 "wet" => 0, # Western European
150 "wat" => -1*3600, # West Africa
151 "azost" => -1*3600, # Azores Standard Time
152 "cvt" => -1*3600, # Cape Verde Time
153 "at" => -2*3600, # Azores
154 "fnt" => -2*3600, # Brazil Time (Extreme East - Fernando Noronha)
155 "ndt" => -2*3600-1800,# Newfoundland Daylight
156 "art" => -3*3600, # Argentina Time
157 # For completeness. BST is also British Summer, and GST is also Guam Standard.
158 # "gst" => -3*3600, # Greenland Standard
159 "nft" => -3*3600-1800,# Newfoundland
160 # "nst" => -3*3600-1800,# Newfoundland Standard
161 "mnt" => -4*3600, # Brazil Time (West Standard - Manaus)
162 "ewt" => -4*3600, # U.S. Eastern War Time
163 "ast" => -4*3600, # Atlantic Standard
164 "bot" => -4*3600, # Bolivia Time
165 "vet" => -4*3600, # Venezuela Time
166 "est" => -5*3600, # Eastern Standard
167 "cot" => -5*3600, # Colombia Time
168 "act" => -5*3600, # Brazil Time (Extreme West - Acre)
169 "pet" => -5*3600, # Peru Time
170 "cst" => -6*3600, # Central Standard
171 "cest" => +2*3600, # Central European Summer
172 "mst" => -7*3600, # Mountain Standard
173 "pst" => -8*3600, # Pacific Standard
174 "yst" => -9*3600, # Yukon Standard
175 "hst" => -10*3600, # Hawaii Standard
176 "cat" => -10*3600, # Central Alaska
177 "ahst" => -10*3600, # Alaska-Hawaii Standard
178 "taht" => -10*3600, # Tahiti Time
179 "nt" => -11*3600, # Nome
180 "idlw" => -12*3600, # International Date Line West
181 "cet" => +1*3600, # Central European
182 "mez" => +1*3600, # Central European (German)
183 "met" => +1*3600, # Middle European
184 "mewt" => +1*3600, # Middle European Winter
185 "swt" => +1*3600, # Swedish Winter
186 "set" => +1*3600, # Seychelles
187 "fwt" => +1*3600, # French Winter
188 "west" => +1*3600, # Western Europe Summer Time
189 "eet" => +2*3600, # Eastern Europe, USSR Zone 1
190 "ukr" => +2*3600, # Ukraine
191 "sast" => +2*3600, # South Africa Standard Time
192 "bt" => +3*3600, # Baghdad, USSR Zone 2
193 "eat" => +3*3600, # East Africa Time
194 # "it" => +3*3600+1800,# Iran
195 "irst" => +3*3600+1800,# Iran Standard Time
196 "zp4" => +4*3600, # USSR Zone 3
197 "msd" => +4*3600, # Moscow Daylight Time
198 "sct" => +4*3600, # Seychelles Time
199 "zp5" => +5*3600, # USSR Zone 4
200 "azst" => +5*3600, # Azerbaijan Summer Time
201 "mvt" => +5*3600, # Maldives Time
202 "uzt" => +5*3600, # Uzbekistan Time
203 "ist" => +5*3600+1800,# Indian Standard
204 "zp6" => +6*3600, # USSR Zone 5
205 "lkt" => +6*3600, # Sri Lanka Time
206 "pkst" => +6*3600, # Pakistan Summer Time
207 "yekst" => +6*3600, # Yekaterinburg Summer Time
208 # For completeness. NST is also Newfoundland Stanard, and SST is also Swedish Summer.
209 # "nst" => +6*3600+1800,# North Sumatra
210 # "sst" => +7*3600, # South Sumatra, USSR Zone 6
211 "wast" => +7*3600, # West Australian Standard
212 "ict" => +7*3600, # Indochina Time
213 "wit" => +7*3600, # Western Indonesia Time
214 # "jt" => +7*3600+1800,# Java (3pm in Cronusland!)
215 "cct" => +8*3600, # China Coast, USSR Zone 7
216 "wst" => +8*3600, # West Australian Standard
217 "hkt" => +8*3600, # Hong Kong
218 "bnt" => +8*3600, # Brunei Darussalam Time
219 "cit" => +8*3600, # Central Indonesia Time
220 "myt" => +8*3600, # Malaysia Time
221 "pht" => +8*3600, # Philippines Time
222 "sgt" => +8*3600, # Singapore Time
223 "jst" => +9*3600, # Japan Standard, USSR Zone 8
224 "kst" => +9*3600, # Korean Standard
225 # "cast" => +9*3600+1800,# Central Australian Standard
226 "east" => +10*3600, # Eastern Australian Standard
227 "gst" => +10*3600, # Guam Standard, USSR Zone 9
228 "nct" => +11*3600, # New Caledonia Time
229 "nzt" => +12*3600, # New Zealand
230 "nzst" => +12*3600, # New Zealand Standard
231 "fjt" => +12*3600, # Fiji Time
232 "idle" => +12*3600, # International Date Line East
233 );
234
235133µs %zoneOff = reverse(%Zone);
23618µs %dstZoneOff = reverse(%dstZone);
237
238 # Preferences
239
2401800ns $zoneOff{0} = 'gmt';
2411500ns $dstZoneOff{3600} = 'bst';
242
243}
244
245sub tz_offset
246{
247 my ($zone, $time) = @_;
248
249 return &tz_local_offset() unless($zone);
250
251 $time = time() unless $time;
252 my(@l) = localtime($time);
253 my $dst = $l[8];
254
255 $zone = lc $zone;
256
257 if ($zone =~ /^([\-\+]\d{3,4})$/) {
258 my $sign = $1 < 0 ? -1 : 1 ;
259 my $v = abs(0 + $1);
260 return $sign * 60 * (int($v / 100) * 60 + ($v % 100));
261 } elsif (exists $dstZone{$zone} && ($dst || !exists $Zone{$zone})) {
262 return $dstZone{$zone};
263 } elsif(exists $Zone{$zone}) {
264 return $Zone{$zone};
265 }
266 undef;
267}
268
269sub tz_name
270{
271 my ($off, $time) = @_;
272
273 $time = time() unless $time;
274 my(@l) = localtime($time);
275 my $dst = $l[8];
276
277 if (exists $dstZoneOff{$off} && ($dst || !exists $zoneOff{$off})) {
278 return $dstZoneOff{$off};
279 } elsif (exists $zoneOff{$off}) {
280 return $zoneOff{$off};
281 }
282 sprintf("%+05d", int($off / 60) * 100 + $off % 60);
283}
284
285120µs1;
286
287__END__