use strict; use Test::More tests => 4 * 7; # strings * methods use DateTime::Format::Oracle; my $class = 'DateTime::Format::Oracle'; my %tests = ( '2003-02-15' => { format => 'YYYY-MM-DD', year => 2003, month => 2, day => 15, hour => 0, minute => 0, second => 0, time_zone => 'floating', }, '15-FEB-03' => { format => 'DD-MON-RR', year => 2003, month => 2, day => 15, hour => 0, minute => 0, second => 0, time_zone => 'floating', }, '2003-02-15 14:39:06' => { format => 'YYYY-MM-DD HH24:MI:SS', year => 2003, month => 2, day => 15, hour => 14, minute => 39, second => 6, time_zone => 'floating', }, '15-FEB-03 02.39.06.167901 PM' => { format => 'DD-MON-RR HH.MI.SSXFF AM', year => 2003, month => 2, day => 15, hour => 14, minute => 39, second => 6, time_zone => 'floating', }, # time zone parsing seems to not work in DateTime::Format::Builder #'2003-02-15 14:39:06 AMERICA/NEW_YORK' => { # format => 'YYYY-MM-DD HH24:MI:SS TZR', # year => 2003, # month => 2, # day => 15, # hour => 14, # minute => 39, # second => 6, # time_zone => 'America/New_York', #}, #'15-FEB-03 02.39.06.167901 PM AMERICA/NEW_YORK' => { # format => 'DD-MON-RR HH.MI.SSXFF AM TZR', # year => 2003, # month => 2, # day => 15, # hour => 14, # minute => 39, # second => 6, # time_zone => 'America/New_York', #}, ); foreach my $string (keys %tests) { my $params = $tests{$string}; my $nls_format = delete $params->{format}; local $ENV{NLS_DATE_FORMAT} = $nls_format; my $dt; eval { $dt = $class->parse_date($string) }; if ($@) { warn "failed to parse date '$string' via format '$nls_format' (" . $class->current_date_format . ")"; next; } foreach my $method (keys %$params) { if ($method eq 'time_zone') { is($dt->$method->name, $params->{$method}, "$nls_format $method"); } else { is($dt->$method, $params->{$method}, "$nls_format $method"); } } }