1#!perl -w 2 3# t/002_basic.t - check module dates in various formats 4 5use Test::More 0.88; 6use DateTime::Format::Strptime; 7use DateTime; 8use DateTime::TimeZone; 9 10my $object = DateTime::Format::Strptime->new( 11 pattern => '%D', 12 13 # time_zone => 'Australia/Melbourne', 14 diagnostic => 1, 15 on_error => 'croak', 16); 17 18my @tests = ( 19 20 # Simple dates 21 [ '%Y-%m-%d', '1998-12-31' ], 22 [ '%y-%m-%d', '98-12-31' ], 23 [ '%Y years, %j days', '1998 years, 312 days' ], 24 [ '%b %d, %Y', 'Jan 24, 2003' ], 25 [ '%B %d, %Y', 'January 24, 2003' ], 26 27 # Simple times 28 [ '%H:%M:%S', '23:45:56' ], 29 [ '%l:%M:%S %p', '11:34:56 PM' ], 30 31 # With Nanoseconds 32 [ '%H:%M:%S.%N', '23:45:56.123456789' ], 33 [ '%H:%M:%S.%6N', '23:45:56.123456' ], 34 [ '%H:%M:%S.%3N', '23:45:56.123' ], 35 36 # Complex dates 37 [ '%Y;%j = %Y-%m-%d', '2003;56 = 2003-02-25' ], 38 [ q|%d %b '%y = %Y-%m-%d|, q|25 Feb '03 = 2003-02-25| ], 39 40 # Leading spaces 41 [ '%e-%b-%Y %T %z', '13-Jun-2010 09:20:47 -0400' ], 42 [ '%e-%b-%Y %T %z', ' 3-Jun-2010 09:20:47 -0400' ], 43); 44 45foreach (@tests) { 46 my ( $pattern, $data, $expect ) = @$_; 47 $expect ||= $data; 48 $object->pattern($pattern); 49 is( 50 $object->format_datetime( $object->parse_datetime($data) ), $expect, 51 $pattern 52 ); 53} 54 55SKIP: { 56 skip 57 "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.", 58 1 59 unless $DateTime::VERSION >= 0.11; 60 61 $object->pattern('%l:%M:%S %p'); 62 is( 63 $object->format_datetime( $object->parse_datetime('12:34:56 AM') ), 64 '12:34:56 AM', '%l:%M:%S %p' 65 ); 66} 67 68# Timezones 69SKIP: { 70 skip 71 "You don't have the latest DateTime::TimeZone. Older versions don't display all time zone information. You should upgrade.", 72 3 73 unless $DateTime::TimeZone::VERSION >= 0.13; 74 75 $object->pattern('%H:%M:%S %z'); 76 is( 77 $object->format_datetime( $object->parse_datetime('23:45:56 +1000') ), 78 '23:45:56 +1000', '%H:%M:%S %z' 79 ); 80 81 $object->pattern('%H:%M:%S %Z'); 82 is( 83 $object->format_datetime( $object->parse_datetime('23:45:56 AEST') ), 84 '23:45:56 +1000', '%H:%M:%S %Z' 85 ); 86 87 $object->pattern('%H:%M:%S %z %Z'); 88 is( 89 $object->format_datetime( 90 $object->parse_datetime('23:45:56 +1000 AEST') 91 ), 92 '23:45:56 +1000 +1000', 93 '%H:%M:%S %z %Z' 94 ); 95} 96 97$object->time_zone('Australia/Perth'); 98$object->pattern('%Y %H:%M:%S %Z'); 99is( 100 $object->format_datetime( $object->parse_datetime('2003 23:45:56 MDT') ), 101 '2003 13:45:56 WST', $object->pattern 102); 103 104done_testing(); 105