1f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#!/usr/bin/perl 2f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# 3f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# Copyright (C) 2007-2007, International Business Machines 4f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# Corporation and others. All Rights Reserved. 5f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# 6f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 7f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)if ($ARGV[0] eq '-h' || $ARGV[0] eq '--help') { 8f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print "Usage: tzone [year month day hour minute]\n"; 9f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) exit(0); 10f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 11f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 12f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)my $LIBRARY = '../../lib'; 13f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 14f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)my @TZONE_RAW = `locate zoneinfo | grep '^/usr/share/zoneinfo/' | grep -v 'tab\$' | grep -v '/right/' | grep -v '/posix/' | grep -v '/posixrules\$' | grep -v '/Factory\$'`; 15f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)my @TZONE; 16f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)my $index = 0; 17f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)my $USECURRENT = 0; 18f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)my $year = 0; 19f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)my $month = 0; 20f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)my $day = 0; 21f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)my $hour = 0; 22f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)my $minute = 0; 23f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 24f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 25f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)if (scalar(@ARGV) == 5) { 26f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ($year, $month, $day, $hour, $minute) = @ARGV; 27f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print "The date we are using is: $month-$day-$year $hour:$minute.\n"; 28f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} else { 29f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print "We are using the current date.\n"; 30f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $USECURRENT = 1; 31f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 32f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 33f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#filter out the time zones 34f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)foreach my $tzone (@TZONE_RAW) { 35f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) chomp($tzone); 36f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (-e $tzone) { 37f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $TZONE[$index] = substr($tzone, 20); 38f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $index++; 39f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 40f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 41f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 42f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#go through each timezone and test 43f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)$count = 0; 44f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)$ENV{'LD_LIBRARY_PATH'} = $LIBRARY; 45f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 46f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)print "The following time zones had wrong results.\n"; 47f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 48f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)foreach my $tzone (@TZONE) { 49f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) #set system time zone 50f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $ENV{'TZ'} = "$tzone"; 51f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 52f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) my @result = `./tzdate $year $month $day $hour $minute $USECURRENT`; 53f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 54f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) #if the result is wrong print the time zone information to a log file 55f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (scalar(@result) > 0) { 56f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print "\nTIME ZONE: $tzone\n"; 57f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print "@result\n"; 58f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $count++; 59f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 60f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 61f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 62f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)print "\nThe number of time zones with wrong results: $count out of $index\n"; 63f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 64f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)print("\n\nGood Bye!\n"); 65f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)exit(0); 66