The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#
# Checking the (lack of) support of time zones
# It is noon in Paris, several people around the world simultaneously want to know
# which time it is.
use DateTime::Calendar::FrenchRevolutionary;
use DateTime;

sub g2r {
  my ($n, $date_r1, $tz) = @_;
  my $format = "%Y %m %d %H %M %S";
  my $date_g = DateTime->new(year => 2003, month => 4, day => 18, 
			hour => 12, minute => 0, second => 0, time_zone => 'Europe/Paris');
  $date_g->set_time_zone($tz);
  my $date_result = DateTime::Calendar::FrenchRevolutionary->from_object(object => $date_g)
                             ->strftime($format);
  my $date_r2 = $date_r1; # Alternate date to check agains, because there may be a rounding error
  substr($date_r2, -2, 2) ++; # add 1 second to alternate date, hoping we do not increment 99 to 100
  if ($date_result eq $date_r1 or $date_result eq $date_r2)
    { print "ok $n\n" }
  else
    { print "not ok $n : expected $date_r1, got $date_result\n" }
}

my @tests = (["0211 07 29 5 00 00", "Europe/Paris"]
           , ["0211 07 29 5 83 33", "Europe/Moscow"]     # offset +2 ABT hours, 83.33 d-minutes
           , ["0211 07 29 4 58 33", "Europe/London"]     # offest -1 ABT hour, -41.67 d-minutes
           , ["0211 07 29 2 08 33", "America/Chicago"]   #  -7 ABT hours, -291.67 d-minutes
           , ["0211 07 29 9 16 66", "Pacific/Auckland"]  #  10 ABT hours, -416.67 d-minutes
           , ["0211 07 29 0 00 00", "Pacific/Tahiti"]    # -12 ABT hours, -500    d-minutes
           , ["0211 07 28 9 58 33", "Pacific/Pago_Pago"] # -13 ABT hours, -541.67 d-minutes
	     );

my $nb_tests = @tests;
my $n = 1;

print "1..$nb_tests\n";

foreach (@tests) { g2r $n++, @$_ }