#!/pro/bin/perl
use strict;
use warnings;
# use POSIX qw( strftime );
use Tk;
use Tk::Clock;
my $m = MainWindow->new (-title => "World Clock");
my %TZ;
while (<DATA>) {
if (m/^(\S+)\s+(GMT\S*)\s+(.*)$/) {
$TZ{$1} = [ $1, $2, undef, $3 ];
$TZ{$2} ||= [ $1, $2, undef, $3 ];
}
if (m/^(.*?)(?:\s+\*)?\s+(GMT\S*)$/) {
$TZ{$2} ||= [ $2, $2, undef, "" ];
$TZ{$2}[2] ||= $1;
exists $TZ{$TZ{$2}[1]} and
$TZ{$TZ{$2}[1]}[2] ||= $1;
}
}
# my $tz = strftime ("%Z", localtime);
foreach my $cd (
[ "UCT", "UCT", "#ff0040" ],
[ "Local", $ENV{TZ}||"", "Red" ],
[ "London", "Europe/London", "OrangeRed" ],
[ "Amsterdam", "Europe/Amsterdam", "Orange" ],
[ "Moscow", "Europe/Moscow", "Yellow" ],
[ "Tokyo", "Asia/Tokyo", "YellowGreen" ],
[ "Los Angeles", "America/Los_Angeles", "Green" ],
[ "New York", "America/New_York", "Turquoise" ],
[ "Darwin", "Australia/Darwin", "Blue" ],
[ "Catham", "GMT+13:45", "Violet" ],
) {
my ($city, $tz, $color) = @$cd;
if (exists $TZ{$tz}) {
$tz = $TZ{$tz}[1];
$city = $TZ{$tz}[2];
}
my $c = $m->Clock (-background => "Black");
$c->config (
anaScale => 200,
secsColor => "Green",
tickColor => "Blue",
tickFreq => 1,
timeFont => "{Liberation Mono} 12",
timeColor => "lightBlue",
timeFormat => "HH:MM:SS",
dateFont => "{Liberation Mono} 12",
dateColor => "Gold",
dateFormat => $city,
timeZone => $tz,
handColor => $color,
);
$c->pack (-side => "left", -expand => 1, -fill => "both");
}
MainLoop;
__END__
ACDT GMT+10:30 Australian Central Daylight Time
ACST GMT+9:30 Australian Central Standard Time
ADT GMT-3 Atlantic Daylight Time
AEDT GMT+11 Australian Eastern Daylight Time
AEST GMT+10 Australian Eastern Standard Time
AKDT GMT-8 Alaska Daylight Time
AKST GMT-9 Alaska Standard Time
AST GMT-4 Atlantic Standard Time
AWDT GMT+9 Australian Western Daylight Time
AWST GMT+8 Australian Western Standard Time
BST GMT+1 British Summer Time
CDT GMT-5 Central Daylight Time
CEDT GMT+2 Central European Daylight Time
CEST GMT+2 Central European Summer Time
CET GMT+1 Central European Time
CST GMT+10:30 Central Summer(Daylight) Time
CST GMT+9:30 Central Standard Time
CST GMT-6 Central Standard Time
CXT GMT+7 Christmas Island Time
EDT GMT-4 Eastern Daylight Time
EEDT GMT+3 Eastern European Daylight Time
EEST GMT+3 Eastern European Summer Time
EET GMT+2 Eastern European Time
EST GMT+11 Eastern Summer(Daylight) Time
EST GMT+10 Eastern Standard Time
EST GMT-5 Eastern Standard Time
GMT GMT Greenwich Mean Time
HAA GMT-3 Heure Avancée de l'Atlantique
HAC GMT-5 Heure Avancée du Centre
HADT GMT-9 Hawaii-Aleutian Daylight Time
HAE GMT-4 Heure Avancée de l'Est
HAP GMT-7 Heure Avancée du Pacifique
HAR GMT-6 Heure Avancée des Rocheuses
HAST GMT-10 Hawaii-Aleutian Standard Time
HAT GMT-2:30 Heure Avancée de Terre-Neuve
HAY GMT-8 Heure Avancée du Yukon
HNA GMT-4 Heure Normale de l'Atlantique
HNC GMT-6 Heure Normale du Centre
HNE GMT-5 Heure Normale de l'Est
HNP GMT-8 Heure Normale du Pacifique
HNR GMT-7 Heure Normale des Rocheuses
HNT GMT-3:30 Heure Normale de Terre-Neuve
HNY GMT-9 Heure Normale du Yukon
IST GMT+1 Irish Summer Time
MDT GMT-6 Mountain Daylight Time
MESZ GMT+2 Mitteleuropäische Sommerzeit
MEZ GMT+1 Mitteleuropäische Zeit
MST GMT-7 Mountain Standard Time
NDT GMT-2:30 Newfoundland Daylight Time
NFT GMT+11:30 Norfolk (Island) Time
NST GMT-3:30 Newfoundland Standard Time
PDT GMT-7 Pacific Daylight Time
PST GMT-8 Pacific Standard Time
UTC GMT Coordinated Universal Time
WEDT GMT+1 Western European Daylight Time
WEST GMT+1 Western European Summer Time
WET GMT Western European Time
WST GMT+9 Western Summer(Daylight) Time
WST GMT+8 Western Standard Time
Addis Ababa GMT+2
Adelaide GMT+10:30
Aden GMT+2
Algiers GMT+0
Amman * GMT+2
Amsterdam * GMT+1
Anadyr * GMT+12
Anchorage * GMT-9
Ankara * GMT+2
Antananarivo GMT+2
Asuncion GMT-5:00
Athens * GMT+2
Atlanta * GMT-5:00
Auckland GMT+11
Baghdad * GMT+3:00
Bangkok GMT+6
Barcelona * GMT+1
Beijing GMT+7
Beirut * GMT+2
Belgrade * GMT+1
Berlin * GMT+1
Bogota GMT-6
Boston * GMT-5:00
Brasilia GMT-4
Brisbane GMT+9:00
Brussels * GMT+1
Bucharest * GMT+2
Budapest * GMT+1
Buenos Aires GMT-4
Cairo * GMT+2
Canberra GMT+9:00
Cape Town GMT+1
Caracas GMT-5:00
Casablanca GMT-1
Chatham Island GMT+13:45
Chicago * GMT-6
Copenhagen * GMT+1
Darwin GMT+10:30
Denver * GMT-7
Detroit * GMT-5:00
Dhaka GMT+5
Dubai GMT+3:00
Dublin * GMT+0
Edmonton * GMT-7
Frankfurt * GMT+1
Geneva * GMT+1
Guatemala GMT-7
Halifax * GMT-4
Hanoi GMT+6
Harare GMT+1
Havana * GMT-5:00
Helsinki * GMT+2
Hong Kong GMT+7
Honolulu GMT-11
Houston * GMT-6
Indianapolis * GMT-5:00
Islamabad GMT+4
Istanbul * GMT+2
Jakarta GMT+6
Jerusalem * GMT+2
Johannesburg GMT+1
Kabul GMT+5:30
Kamchatka * GMT+12
Karachi GMT+4
Kathmandu GMT+6:45
Khartoum GMT+2
Kingston GMT-6
Kiritimati GMT+13
Kolkata GMT+6:30
Kuala Lumpur GMT+7
Kuwait City GMT+2
Kyiv * GMT+2
Lagos GMT+0
Lahore GMT+4
La Paz GMT-5:00
Lima GMT-6
Lisbon * GMT+0
London * GMT
Los Angeles * GMT-8
Madrid * GMT+1
Managua GMT-7
Manila GMT+7
Melbourne GMT+9:00
Mexico City * GMT-6
Miami * GMT-5:00
Minneapolis * GMT-6
Minsk * GMT+2
Montevideo GMT-4
Montgomery * GMT-6
Montreal * GMT-5:00
Moscow * GMT+3
Mumbai GMT+6:30
Nairobi GMT+2
Nassau * GMT-5:00
New Delhi GMT+6:30
New Orleans * GMT-6
New York * GMT-5
Odesa * GMT+2
Oslo * GMT+1
Ottawa * GMT-5
Paris * GMT+1
Perth GMT+7
Philadelphia * GMT-5
Phoenix GMT-8
Prague * GMT+1
Reykjavik GMT-1
Rio de Janeiro GMT-4
Riyadh GMT+2
Rome * GMT+1
San Francisco * GMT-8
San Juan GMT-5
San Salvador GMT-7
Santiago GMT-5
Santo Domingo GMT-5
Sao Paulo GMT-4
Seattle * GMT-8
Seoul GMT+8
Shanghai GMT+7
Singapore GMT+7
Sofia * GMT+2
St. John's * GMT-2:30
Stockholm * GMT+1
St. Paul * GMT-6
Suva GMT+11
Sydney GMT+9
Taipei GMT+7
Tallinn * GMT+2
Tashkent GMT+4
Tegucigalpa GMT-7
Tehran GMT+4:30
Tokyo GMT+8
Toronto * GMT-5
Vancouver * GMT-8
Vienna * GMT+1
Vladivostok * GMT+10
Warsaw * GMT+1
Washington DC * GMT-5
Winnipeg * GMT-6
Yangon GMT+7:30
Zagreb * GMT+1
Zürich * GMT+1