WDef
Group: Members
Posts: 798
Joined: Sep. 2005 |
|
Posted: Sep. 23 2007,16:11 |
|
With 24-hr output and taking multiple city arguments:
EDIT: added -f option to access extended listing of city times, useage -h
EDIT2&3: now outputs 5-char time in justified columns for tidy display. Set width with option -w
EDIT4: Web source is www.whatisthetime.com. -f switch has no effect for this.
Code Sample | #!/usr/bin/perl
# Use -h for useage # 24-hour, multi arg version # -f option for long city listing # -w option to set output width
use strict; use warnings; use Getopt::Std;
my $defaultwidth = 14; # default output width in chars, overidden by -w switch
#========================================
sub twelveto24{ # adapted from http://keithdevens.com/weblog/archive/2006/Feb/02/12-to-24 my ($hr, $per) = @_; return '00' if($hr == 12 and $per eq 'AM'); return $hr+12 if($hr != 12 and $per eq 'PM'); if (length($hr) eq 1){ $hr = '0' . $hr }; return $hr; }
#=========================================
my ($city, $URL, $displaywidth); our ($opt_f, $opt_h, $opt_w); my $download = "/tmp/citytimes.$$.html";
# Parse cli switches getopts('fhw:');
if ($opt_h) { die "Useage: $0 [-f|-h] [-w WIDTH ] somecity1 somecity2 somecity3 ..\n" }; if (!$ARGV[0]) {die "No city specified"}; if ($opt_w){ if ($opt_w !~ /\d+/ ) { die "Invalid argument to -w option" } else { $displaywidth = $opt_w } } else { $displaywidth = $defaultwidth }
#~ if ($opt_f) { $URL = "http://www.timeanddate.com/worldclock/full.html" #~ } else { $URL = "http://www.timeanddate.com/worldclock/" }
if ($opt_f) { $URL = "http://www.whattimeisit.com/cgitime.exe?Mode=FullList" } else { $URL = "http://www.whattimeisit.com/cgitime.exe?Mode=FullList" }
# print "timeanddate.com:\n"; # legal print "www.whattimeisit.com:\n";
system("wget -O $download $URL &>/dev/null");
open(CONT, $download) or die "Could not open $download";
while (<CONT>){ foreach $city(@ARGV) { if ($city !~ /\w+/) { die "City '$city' not alphanumeric" } if (/$city.+?(\d{1,2})\:(\d+\d+) ((AM|PM))/i) { my ($hr, $min, $ampm) = ( $1, $2, $3); my $newhr = twelveto24($hr, $ampm); my $newtime = $newhr . ":" . $min; my $F = 'A' . $displaywidth; print pack("$F A5", $city, $newtime), "\n"; } } }
unlink $download;
|
|