#!perl use strict; use warnings; use Test::More; use DateTime (); use DateTime::Format::RFC3501(); my @tests = ( [ # UTC DateTime->new( year => 2002, month => 7, day => 1, hour => 13, minute => 50, second => 5, time_zone => 'UTC' ), ' 1-Jul-2002 13:50:05 +0000', ], [ # Positive offset DateTime->new( year => 2002, month => 7, day => 1, hour => 13, minute => 50, second => 5, time_zone => 'Europe/London' ), ' 1-Jul-2002 13:50:05 +0100', ], [ # Zero offset DateTime->new( year => 2002, month => 1, day => 1, hour => 13, minute => 50, second => 5, time_zone => 'Europe/London' ), ' 1-Jan-2002 13:50:05 +0000', ], [ # Negative offset. DateTime->new( year => 2002, month => 1, day => 1, hour => 13, minute => 50, second => 5, time_zone => 'America/New_York' ), ' 1-Jan-2002 13:50:05 -0500', ], [ # Offset with non-integral minutes. DateTime->new( year => 1880, month => 1, day => 1, hour => 0, minute => 0, second => 0, time_zone => 'America/New_York' ), ' 1-Jan-1880 04:56:02 +0000', ], ); plan tests => 0+@tests; for (@tests) { my ($dt, $expected_str) = @$_; $dt->set_formatter('DateTime::Format::RFC3501'); my $actual_str = "$dt"; is( $actual_str, $expected_str ); }