|
Packit Service |
653591 |
#!/usr/bin/perl -w
|
|
Packit Service |
653591 |
# Copyright (c) 2009-2017 Sullivan Beck. All rights reserved.
|
|
Packit Service |
653591 |
# This program is free software; you can redistribute it and/or modify it
|
|
Packit Service |
653591 |
# under the same terms as Perl itself.
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
###############################################################################
|
|
Packit Service |
653591 |
###############################################################################
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
require 5.010000;
|
|
Packit Service |
653591 |
use Date::Manip::Date;
|
|
Packit Service |
653591 |
use IO::File;
|
|
Packit Service |
653591 |
use strict;
|
|
Packit Service |
653591 |
use warnings;
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
###############################################################################
|
|
Packit Service |
653591 |
# HELP
|
|
Packit Service |
653591 |
###############################################################################
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
our($usage);
|
|
Packit Service |
653591 |
my $COM = $0;
|
|
Packit Service |
653591 |
$COM =~ s/^.*\///;
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
$usage=
|
|
Packit Service |
653591 |
"usage: $COM OPTIONS [ZONE ZONE ...]
|
|
Packit Service |
653591 |
-h/--help : Print help.
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
-v/--vebose : Prints a full description of each
|
|
Packit Service |
653591 |
timezone.
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
-c/--cutoff YEAR : Cut off verbose output near the
|
|
Packit Service |
653591 |
start of YEAR.
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
";
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
=pod
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
=head1 NAME
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
dm_zdump - timezone dumper
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
=head1 SYNOPSIS
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
This performs the same operation as the unix 'zdump' command, but using
|
|
Packit Service |
653591 |
the Date::Manip module.
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
dm_zdump [-v] [-c YEAR] [ZONE ZONE ...]
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
=head1 DESCRIPTION
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
This displays the current time in each ZONE named on the command line
|
|
Packit Service |
653591 |
unless the -v option is given.
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
=over 4
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
=item -h, --help
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
Print online help.
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
=item -v, --verbose
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
This displays all critical dates (i.e. the times when a time change
|
|
Packit Service |
653591 |
occurs due to the timezone description) for each of the timezones
|
|
Packit Service |
653591 |
listed (or the local timezone if none are listed).
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
Each critical date is printed as two lines of output: the last second
|
|
Packit Service |
653591 |
before the change occurs, and the first second of the new time.
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
By default, all critical dates from Jan 1, 0001 until the year 20 years
|
|
Packit Service |
653591 |
in the future are printed, but this can be changed with the -c option.
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
=item -c, --cutoff YEAR
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
This specifies the cutoff year. All critical dates up to the start of
|
|
Packit Service |
653591 |
YEAR are given. The GMT time Jan 01, YEAR at 00:00:00 is the cutoff
|
|
Packit Service |
653591 |
time.
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
=back
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
=head1 KNOWN BUGS
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
None known.
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
=head1 BUGS AND QUESTIONS
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
Please refer to the Date::Manip::Problems documentation for
|
|
Packit Service |
653591 |
information on submitting bug reports or questions to the author.
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
=head1 SEE ALSO
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
Date::Manip::Date
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
=head1 LICENSE
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
This script is free software; you can redistribute it and/or
|
|
Packit Service |
653591 |
modify it under the same terms as Perl itself.
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
=head1 AUTHOR
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
Sullivan Beck (sbeck@cpan.org)
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
=cut
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
###############################################################################
|
|
Packit Service |
653591 |
# PARSE ARGUMENTS
|
|
Packit Service |
653591 |
###############################################################################
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
our($date,$dmt,$dmb,$verbose,$cutoff,@zone);
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
$date = new Date::Manip::Date "now";
|
|
Packit Service |
653591 |
$dmt = $date->tz();
|
|
Packit Service |
653591 |
$dmb = $date->base();
|
|
Packit Service |
653591 |
$cutoff = $date->printf('%Y') + 21;
|
|
Packit Service |
653591 |
$verbose = 0;
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
while ($_ = shift) {
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
(print $usage), exit if ($_ eq "-h" || $_ eq "--help");
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
$verbose = 1, next if ($_ eq "-v" || $_ eq "--verbose");
|
|
Packit Service |
653591 |
$cutoff = shift, next if ($_ eq "-c" || $_ eq "--cutoff");
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
@zone = ($_,@ARGV);
|
|
Packit Service |
653591 |
last;
|
|
Packit Service |
653591 |
}
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
if (@zone) {
|
|
Packit Service |
653591 |
foreach my $z (@zone) {
|
|
Packit Service |
653591 |
my $tmp = $dmt->zone($z);
|
|
Packit Service |
653591 |
if (! $tmp) {
|
|
Packit Service |
653591 |
die "ERROR: invalid timezone: $z\n";
|
|
Packit Service |
653591 |
}
|
|
Packit Service |
653591 |
$z = $tmp;
|
|
Packit Service |
653591 |
}
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
} else {
|
|
Packit Service |
653591 |
@zone = $dmt->curr_zone();
|
|
Packit Service |
653591 |
}
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
############################################################################
|
|
Packit Service |
653591 |
# MAIN PROGRAM
|
|
Packit Service |
653591 |
############################################################################
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
if ($verbose) {
|
|
Packit Service |
653591 |
foreach my $z (@zone) {
|
|
Packit Service |
653591 |
my @per = $dmt->periods($z,undef,$cutoff);
|
|
Packit Service |
653591 |
foreach my $per (@per) {
|
|
Packit Service |
653591 |
my($startUT,$startLT,$offsetstr,$offset,$abbrev,$isdst,$endUT,$endLT)
|
|
Packit Service |
653591 |
= @$per;
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
$startUT = datestr($startUT);
|
|
Packit Service |
653591 |
$startLT = datestr($startLT);
|
|
Packit Service |
653591 |
$endUT = datestr($endUT);
|
|
Packit Service |
653591 |
$endLT = datestr($endLT);
|
|
Packit Service |
653591 |
my $gmtoff = $$offset[0]*3600 + $$offset[1]*60 + $$offset[2];
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
print "$z $startUT UT = $startLT $abbrev isdst=$isdst gmtoff=$gmtoff\n";
|
|
Packit Service |
653591 |
print "$z $endUT UT = $endLT $abbrev isdst=$isdst gmtoff=$gmtoff\n";
|
|
Packit Service |
653591 |
}
|
|
Packit Service |
653591 |
print "\n" if ($#zone != 0);
|
|
Packit Service |
653591 |
}
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
} else {
|
|
Packit Service |
653591 |
my $wid = 0;
|
|
Packit Service |
653591 |
foreach my $z (@zone) {
|
|
Packit Service |
653591 |
$wid = length($z) if (length($z) > $wid);
|
|
Packit Service |
653591 |
}
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
foreach my $z (@zone) {
|
|
Packit Service |
653591 |
$date->convert($z);
|
|
Packit Service |
653591 |
print $z," "x($wid-length($z))," ",$date->printf('%a %b %e %H:%M:%S %Y %Z'),"\n";
|
|
Packit Service |
653591 |
}
|
|
Packit Service |
653591 |
}
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
sub datestr {
|
|
Packit Service |
653591 |
my($date) = @_;
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
my %mon = qw(1 Jan 2 Feb 3 Mar 4 Apr 5 May 6 Jun
|
|
Packit Service |
653591 |
7 Jul 8 Aug 9 Sep 10 Oct 11 Nov 12 Dec);
|
|
Packit Service |
653591 |
my %dow = qw(1 Mon 2 Tue 3 Wed 4 Thu 5 Fri 6 Sat 7 Sun);
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
my($y,$m,$d,$h,$mn,$s) = @$date;
|
|
Packit Service |
653591 |
my $dow = $dmb->day_of_week($date);
|
|
Packit Service |
653591 |
$dow = $dow{$dow};
|
|
Packit Service |
653591 |
my $mon = $mon{$m+0};
|
|
Packit Service |
653591 |
$y="0$y" while (length($y) < 4);
|
|
Packit Service |
653591 |
$d=" $d" if (length($d) < 2);
|
|
Packit Service |
653591 |
$h="0$h" if (length($h) < 2);
|
|
Packit Service |
653591 |
$mn="0$mn" if (length($mn) < 2);
|
|
Packit Service |
653591 |
$s="0$s" if (length($s) < 2);
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
return "$dow $mon $d $h:$mn:$s $y";
|
|
Packit Service |
653591 |
}
|
|
Packit Service |
653591 |
|
|
Packit Service |
653591 |
# Local Variables:
|
|
Packit Service |
653591 |
# mode: cperl
|
|
Packit Service |
653591 |
# indent-tabs-mode: nil
|
|
Packit Service |
653591 |
# cperl-indent-level: 3
|
|
Packit Service |
653591 |
# cperl-continued-statement-offset: 2
|
|
Packit Service |
653591 |
# cperl-continued-brace-offset: 0
|
|
Packit Service |
653591 |
# cperl-brace-offset: 0
|
|
Packit Service |
653591 |
# cperl-brace-imaginary-offset: 0
|
|
Packit Service |
653591 |
# cperl-label-offset: 0
|
|
Packit Service |
653591 |
# End:
|