Blame examples/dm_zdump

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: