#!/usr/bin/perl
use strict;
use Time::Local;

my $et = $ARGV[0];

  my @l  = localtime($et);
  my $o  = 0;
  my @g = gmtime($et);

  $o = (timelocal(@l) - timelocal(@g)) / 60;
  # Adjust to hours and minutes and not hours and hour-hundreths
  # See debian bug 646084
  $o = int($o / 60)*100 + ($o%60)*($o > 0 ? 1 : -1);
  my $date_string = sprintf("%s, %02d %s %d %02d:%02d:%02d %+05d",
                            (qw(Sun Mon Tue Wed Thu Fri Sat))[$l[6]],
                            $l[3],
                            (qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec))[$l[4]],
                            $l[5]+1900, $l[2], $l[1], $l[0],
                            $o);

print "WRONG: $date_string\n";

my $hour_diff;
# if the year is different then we are 1 day off
if($l[5] != $g[5])
{
  $hour_diff = ($l[5] - $g[5])*24 + $l[2] - $g[2];
}
else
{
  $hour_diff = ($l[7] - $g[7])*24 + $l[2] - $g[2];
}
my $min_diff  = $l[1] - $g[1];

# NB min_diff may be negative for timezone that is not an integer number of hours
my $total_diff = $hour_diff * 60 + $min_diff;
my $hour = int($total_diff / 60);
my $min = abs($total_diff - $hour * 60);
$o = int($total_diff / 60)*100 + abs($total_diff - $hour * 60);

$date_string = sprintf("%s, %02d %s %d %02d:%02d:%02d %+05d",
                            (qw(Sun Mon Tue Wed Thu Fri Sat))[$l[6]],
                            $l[3],
                            (qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec))[$l[4]],
                            $l[5]+1900, $l[2], $l[1], $l[0],
                            $o);
print "RIGHT: $date_string\n";
