1#!perl -w 2 3# t/002_basic.t - check module dates in various formats 4 5use Test::More tests => 17; 6use DateTime::Format::Strptime; 7use DateTime; 8use DateTime::TimeZone; 9 10my $object = DateTime::Format::Strptime->new( 11 pattern => '%D', 12# time_zone => 'Australia/Melbourne', 13 diagnostic => 0, 14); 15 16my @tests = ( 17 # Simple dates 18 ['%Y-%m-%d', '1998-12-31'], 19 ['%y-%m-%d', '98-12-31'], 20 ['%Y years, %j days', '1998 years, 312 days'], 21 ['%b %d, %Y', 'Jan 24, 2003'], 22 ['%B %d, %Y', 'January 24, 2003'], 23 24 # Simple times 25 ['%H:%M:%S', '23:45:56'], 26 ['%l:%M:%S %p', '11:34:56 PM'], 27 28 # With Nanoseconds 29 ['%H:%M:%S.%N', '23:45:56.123456789'], 30 ['%H:%M:%S.%6N', '23:45:56.123456'], 31 ['%H:%M:%S.%3N', '23:45:56.123'], 32 33 # Complex dates 34 ['%Y;%j = %Y-%m-%d', '2003;56 = 2003-02-25'], 35 [q|%d %b '%y = %Y-%m-%d|, q|25 Feb '03 = 2003-02-25|], 36); 37 38foreach (@tests) { 39 my ($pattern, $data, $expect) = @$_; 40 $expect ||= $data; 41 $object->pattern($pattern); 42 is($object->format_datetime( $object->parse_datetime( $data ) ), $expect, $pattern); 43} 44 45SKIP: { 46 skip "You don't have the latest DateTime. Older version have a bug whereby 12am and 12pm are shown as 0am and 0pm. You should upgrade.", 1 47 unless $DateTime::VERSION >= 0.11; 48 49 $object->pattern('%l:%M:%S %p'); 50 is($object->format_datetime( $object->parse_datetime( '12:34:56 AM' ) ), 51 '12:34:56 AM', '%l:%M:%S %p'); 52} 53 54 55# Timezones 56SKIP: { 57 skip "You don't have the latest DateTime::TimeZone. Older versions don't display all time zone information. You should upgrade.", 3 58 unless $DateTime::TimeZone::VERSION >= 0.13; 59 60 $object->pattern('%H:%M:%S %z'); 61 is($object->format_datetime( $object->parse_datetime( '23:45:56 +1000' ) ), 62 '23:45:56 +1000', '%H:%M:%S %z'); 63 64 $object->pattern('%H:%M:%S %Z'); 65 is($object->format_datetime( $object->parse_datetime( '23:45:56 AEST' ) ), 66 '23:45:56 +1000', '%H:%M:%S %Z'); 67 68 $object->pattern('%H:%M:%S %z %Z'); 69 is($object->format_datetime( $object->parse_datetime( '23:45:56 +1000 AEST' ) ), 70 '23:45:56 +1000 +1000', '%H:%M:%S %z %Z'); 71} 72 73$object->time_zone('Australia/Perth'); 74$object->pattern('%Y %H:%M:%S %Z'); 75is($object->format_datetime( $object->parse_datetime( '2003 23:45:56 MDT' ) ), '2003 13:45:56 WST', $object->pattern); 76 77