#!/usr/bin/perl -w
# Copyright (c) 2010-2017 Sullivan Beck. All rights reserved.
# This program is free software; you can redistribute it and/or modify it
# under the same terms as Perl itself.
###############################################################################
###############################################################################
# This script is used to automatically generate the Date::Manip::DM5abbrevs
# modeul used in Date::Manip 5.xx .
use lib "./lib";
require 5.010000;
use strict;
use warnings;
use Date::Manip::Zones;
use Date::Manip::TZ;
our($VERSION);
$VERSION='6.60';
our($DEBUG);
$DEBUG = 0;
our(@keep);
@keep = qw(
idlw -1200
nt -1100
sat -0400
cldt -0300
at -0200
utc +0000
mewt +0100
mez +0100
fwt +0100
gb +0100
swt +0100
mesz +0200
fst +0200
metdst +0200
eetdst +0300
eetedt +0300
bt +0300
it +0330
zp4 +0400
zp5 +0500
ist +0530
zp6 +0600
awst +0800
rok +0900
aest +1000
acdt +1030
cadt +1030
aedt +1100
eadt +1100
nzt +1200
idle +1200
);
############################################################################
# MAIN PROGRAM
############################################################################
my $year = ( localtime(time) )[5] + 1900;
my $tz = new Date::Manip::TZ;
my $podstr = '=pod'; # so the CPAN indexer won't treat this as a POD file
print "package Date::Manip::DM5abbrevs;
# Copyright (c) 2003-$year Sullivan Beck. All rights reserved.
# This program is free software; you can redistribute it and/or modify it
# under the same terms as Perl itself.
########################################################################
########################################################################
$podstr
=head1 NAME
Date::Manip::DM5abbrevs - A list of all timezone abbreviations
=head1 SYNPOSIS
This module is not intended to be used directly. Date::Manip 5.xx
will load it as needed.
This module contains all of the time zone abbreviations from
Date::Manip 6.xx copied backwards to 5.xx to provide slightly
better support for time zones.
Note that this is only a bandaid fix, and does not add proper
time zone handling to version 5.xx .
=cut
require 5.000;
use strict;
use warnings;
our(\$VERSION);
\$VERSION='6.60';
END {
my \$tmp;
\$tmp = \\\$Date::Manip::DM5::Abbrevs;
}
\$Date::Manip::DM5::Abbrevs = join(' ',qw(
";
my @tmp = @keep;
my %off;
while (@tmp) {
my($abb) = shift(@tmp);
my($off) = shift(@tmp);
$off{$abb} = $off;
print " $abb" . " "x(6-length($abb)) . " $off\n";
}
print "\n";
# We have to come up with the best offset for each abbreviation.
#
# We'll look first at values in the current year.
# Then we'll look back in time.
ABBREV: foreach my $abbrev (sort keys %Date::Manip::Zones::Abbrev) {
my @zone = @{ $Date::Manip::Zones::Abbrev{$abbrev} };
foreach my $zone (@zone) {
my @period = $tz->all_periods($zone,$year);
foreach my $period (@period) {
my @per = @$period;
my $abb = lc($per[4]);
next if ($abb ne $abbrev);
my $off = $per[3];
my ($h,$m,$s) = @$off;
$h += 0;
next if ($s != 0);
my $sign;
if ($h < 0) {
$h *= -1;
$m *= -1;
$sign = "-";
} else {
$sign = "+";
}
$h = "0$h" if (length($h) == 1);
$m = "0$m" if (length($m) == 1);
$off = "$sign$h$m";
print " $abb" . " "x(6-length($abb)) . " $off\n";
$off{$abb} = $off;
next ABBREV;
}
}
# If we've arrived here, we didn't find the abbreviation in
# the current year, so we need to go back in time.
my $best_off = "";
my $best_date = "0001010100:00:00";
print ":: Abbrev = $abbrev...\n" if ($DEBUG);
ZONE:foreach my $zone (@zone) {
my @period = $tz->periods($zone,undef,$year);
while (@period) {
my $period = pop(@period);
my @per = @$period;
my $date = $per[10];
my $abb = lc($per[4]);
next if ($abb ne $abbrev);
my $off = $per[3];
my ($h,$m,$s) = @$off;
$h += 0;
next if ($s != 0);
my $sign;
if ($h < 0 ||
($h == 0 && $m < 0)) {
$h *= -1;
$m *= -1;
$sign = "-";
} else {
$sign = "+";
}
$h = "0$h" if (length($h) == 1);
$m = "0$m" if (length($m) == 1);
if ($date lt $best_date) {
print ":: $zone => $best_off [ $best_date ]\n" if ($DEBUG);
next ZONE;
}
$best_off = "$sign$h$m";
$best_date = $date;
print ":: $zone => $best_off [ $best_date ] ***\n" if ($DEBUG);
next ZONE;
}
}
if ($best_off) {
$off{$abbrev} = $best_off;
print " $abbrev" . " "x(6-length($abbrev)) . " $best_off\n";
}
next ABBREV;
}
print "));
$podstr
=head1 TIMEZONES
The following timezones are defined:
";
foreach my $abb (sort keys %off) {
my $off = $off{$abb};
print " " . uc($abb) . " "x(6-length($abb)) . " $off\n";
}
print "
=head1 LICENSE
This script is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=head1 AUTHOR
Sullivan Beck (sbeck\@cpan.org)
=cut
1;
";
# Local Variables:
# mode: cperl
# indent-tabs-mode: nil
# cperl-indent-level: 3
# cperl-continued-statement-offset: 2
# cperl-continued-brace-offset: 0
# cperl-brace-offset: 0
# cperl-brace-imaginary-offset: 0
# cperl-label-offset: 0
# End: