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 )