Container-Builder
view release on metacpan or search on metacpan
examples/fatpacked.plackup view on Meta::CPAN
our $VERSION = "0.46";
our @EXPORT_OK = qw/strftime/;
use constant {
SEC => 0,
MIN => 1,
HOUR => 2,
DAY => 3,
MONTH => 4,
YEAR => 5,
WDAY => 6,
YDAY => 7,
ISDST => 8,
ISO_WEEK_START_WDAY => 1, # Monday
ISO_WEEK1_WDAY => 4, # Thursday
YDAY_MINIMUM => -366,
};
BEGIN {
*tzoffset = \&_tzoffset;
*tzname = \&_tzname;
if (eval { require Time::TZOffset; 1; }) {
no warnings 'redefine';
*tzoffset = \&Time::TZOffset::tzoffset;
}
}
# copy from POSIX/strftime/GNU/PP.pm and modify
my @offset2zone = qw(
-1100 0 SST -1100 0 SST
-1000 0 HAST -0900 1 HADT
-1000 0 HST -1000 0 HST
-0930 0 MART -0930 0 MART
-0900 0 AKST -0800 1 AKDT
-0900 0 GAMT -0900 0 GAMT
-0800 0 PST -0700 1 PDT
-0800 0 PST -0800 0 PST
-0700 0 MST -0600 1 MDT
-0700 0 MST -0700 0 MST
-0600 0 CST -0500 1 CDT
-0600 0 GALT -0600 0 GALT
-0500 0 ECT -0500 0 ECT
-0500 0 EST -0400 1 EDT
-0500 1 EASST -0600 0 EAST
-0430 0 VET -0430 0 VET
-0400 0 AMT -0400 0 AMT
-0400 0 AST -0300 1 ADT
-0330 0 NST -0230 1 NDT
-0300 0 ART -0300 0 ART
-0300 0 PMST -0200 1 PMDT
-0300 1 AMST -0400 0 AMT
-0300 1 WARST -0300 1 WARST
-0200 0 FNT -0200 0 FNT
-0200 1 UYST -0300 0 UYT
-0100 0 AZOT +0000 1 AZOST
-0100 0 CVT -0100 0 CVT
+0000 0 GMT +0000 0 GMT
+0000 0 WET +0100 1 WEST
+0100 0 CET +0200 1 CEST
+0100 0 WAT +0100 0 WAT
+0200 0 EET +0200 0 EET
+0200 0 IST +0300 1 IDT
+0200 1 WAST +0100 0 WAT
+0300 0 FET +0300 0 FET
+030704 0 zzz +030704 0 zzz
+0330 0 IRST +0430 1 IRDT
+0400 0 AZT +0500 1 AZST
+0400 0 GST +0400 0 GST
+0430 0 AFT +0430 0 AFT
+0500 0 DAVT +0700 0 DAVT
+0500 0 MVT +0500 0 MVT
+0530 0 IST +0530 0 IST
+0545 0 NPT +0545 0 NPT
+0600 0 BDT +0600 0 BDT
+0630 0 CCT +0630 0 CCT
+0700 0 ICT +0700 0 ICT
+0800 0 HKT +0800 0 HKT
+0845 0 CWST +0845 0 CWST
+0900 0 JST +0900 0 JST
+0930 0 CST +0930 0 CST
+1000 0 PGT +1000 0 PGT
+1030 1 CST +0930 0 CST
+1100 0 CAST +0800 0 WST
+1100 0 NCT +1100 0 NCT
+1100 1 EST +1000 0 EST
+1100 1 LHST +1030 0 LHST
+1130 0 NFT +1130 0 NFT
+1200 0 FJT +1200 0 FJT
+1300 0 TKT +1300 0 TKT
+1300 1 NZDT +1200 0 NZST
+1345 1 CHADT +1245 0 CHAST
+1400 0 LINT +1400 0 LINT
+1400 1 WSDT +1300 0 WST
);
sub _tzoffset {
my $diff = (exists $ENV{TZ} and $ENV{TZ} =~ m!^(?:GMT|UTC)$!)
? 0
: Time::Local::timegm(@_) - Time::Local::timelocal(@_);
sprintf '%+03d%02u', $diff/60/60, $diff/60%60;
}
sub _tzname {
return $ENV{TZ} if exists $ENV{TZ} and $ENV{TZ} =~ m!^(?:GMT|UTC)$!;
my $diff = tzoffset(@_);
my @t1 = my @t2 = @_;
@t1[3,4] = (1, 1); # winter
my $diff1 = tzoffset(@t1);
@t2[3,4] = (1, 7); # summer
my $diff2 = tzoffset(@t2);
for (my $i=0; $i < @offset2zone; $i += 6) {
next unless $offset2zone[$i] eq $diff1 and $offset2zone[$i+3] eq $diff2;
return $diff2 eq $diff ? $offset2zone[$i+5] : $offset2zone[$i+2];
}
if ($diff =~ /^([+-])(\d\d)$/) {
( run in 0.570 second using v1.01-cache-2.11-cpan-e1769b4cff6 )