# # 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++, @$_ }