use strict;
use warnings;
use lib qw( ./lib );
use Test::More tests => 174;
use DateTime::Format::ISO8601;
my $base_year = 2000;
my $base_month = "01";
my $iso8601 = DateTime::Format::ISO8601->new(
base_datetime => DateTime->new( year => $base_year, month => $base_month ),
);
{
my $dt = $iso8601->parse_datetime( '19850412' );
is( $dt->ymd, '1985-04-12' );
}
{
my $dt = $iso8601->parse_datetime( '1985-04-12' );
is( $dt->ymd, '1985-04-12' );
}
{
my $dt = $iso8601->parse_datetime( '1985-04' );
is( $dt->ymd, '1985-04-01' );
}
{
my $dt = $iso8601->parse_datetime( '1985' );
is( $dt->ymd, '1985-01-01' );
}
{
my $dt = $iso8601->parse_datetime( '19' );
is( $dt->ymd, '1901-01-01' );
}
{
my $dt = $iso8601->parse_datetime( '850412' );
is( $dt->ymd, '1985-04-12' );
}
{
my $dt = $iso8601->parse_datetime( '85-04-12' );
is( $dt->ymd, '1985-04-12' );
}
{
my $dt = $iso8601->parse_datetime( '-8504' );
is( $dt->ymd, '1985-04-01' );
}
{
my $dt = $iso8601->parse_datetime( '-85-04' );
is( $dt->ymd, '1985-04-01' );
}
{
my $dt = $iso8601->parse_datetime( '-85' );
is( $dt->year, '1985' );
}
{
my $dt = $iso8601->parse_datetime( '--0412' );
is( $dt->ymd, "${base_year}-04-12" );
}
{
my $dt = $iso8601->parse_datetime( '--04-12' );
is( $dt->ymd, "${base_year}-04-12" );
}
{
my $dt = $iso8601->parse_datetime( '--04' );
is( $dt->ymd, "${base_year}-04-01" );
}
{
my $dt = $iso8601->parse_datetime( '---12' );
is( $dt->ymd, "${base_year}-${base_month}-12" );
}
{
my $dt = $iso8601->parse_datetime( '+0019850412' );
is( $dt->ymd, '1985-04-12' );
}
{
my $dt = $iso8601->parse_datetime( '+001985-04-12' );
is( $dt->ymd, '1985-04-12' );
}
{
my $dt = $iso8601->parse_datetime( '+001985-04' );
is( $dt->ymd, '1985-04-01' );
}
{
my $dt = $iso8601->parse_datetime( '+001985' );
is( $dt->ymd, '1985-01-01' );
}
{
my $dt = $iso8601->parse_datetime( '+0019' );
is( $dt->ymd, '1901-01-01' );
}
{
my $dt = $iso8601->parse_datetime( '1985102' );
is( $dt->ymd, '1985-04-12' );
}
{
my $dt = $iso8601->parse_datetime( '1985-102' );
is( $dt->ymd, '1985-04-12' );
}
{
my $dt = $iso8601->parse_datetime( '85102' );
is( $dt->ymd, '1985-04-12' );
}
{
my $dt = $iso8601->parse_datetime( '85-102' );
is( $dt->ymd, '1985-04-12' );
}
{
my $dt = $iso8601->parse_datetime( '-102' );
my $year = sprintf( "%04i", $base_year );
is( $dt->strftime( "%j" ), 102 );
}
{
my $dt = $iso8601->parse_datetime( '+001985102' );
is( $dt->ymd, '1985-04-12' );
}
{
my $dt = $iso8601->parse_datetime( '+001985-102' );
is( $dt->ymd, '1985-04-12' );
}
{
my $dt = $iso8601->parse_datetime( '1985W155' );
is( $dt->ymd, '1985-04-12' );
}
{
my $dt = $iso8601->parse_datetime( '1985-W15-5' );
is( $dt->ymd, '1985-04-12' );
}
{
my $dt = $iso8601->parse_datetime( '1985W15' );
is( $dt->ymd, '1985-04-08' );
}
{
my $dt = $iso8601->parse_datetime( '1985-W15' );
is( $dt->ymd, '1985-04-08' );
}
{
my $dt = $iso8601->parse_datetime( '85W155' );
is( $dt->ymd, '1985-04-12' );
}
{
my $dt = $iso8601->parse_datetime( '85-W15-5' );
is( $dt->ymd, '1985-04-12' );
}
{
my $dt = $iso8601->parse_datetime( '85W15' );
is( $dt->ymd, '1985-04-08' );
}
{
my $dt = $iso8601->parse_datetime( '85-W15' );
is( $dt->ymd, '1985-04-08' );
}
{
my $dt = $iso8601->parse_datetime( '-5W155' );
is( $dt->year, '2005' );
is( $dt->week_number, '15' );
is( $dt->day_of_week, '5' );
}
{
my $dt = $iso8601->parse_datetime( '-5-W15-5' );
is( $dt->year, '2005' );
is( $dt->week_number, '15' );
is( $dt->day_of_week, '5' );
}
{
my $dt = $iso8601->parse_datetime( '-5W15' );
is( $dt->year, '2005' );
is( $dt->week_number, '15' );
}
{
my $dt = $iso8601->parse_datetime( '-5-W15' );
is( $dt->year, '2005' );
is( $dt->week_number, '15' );
}
{
my $dt = $iso8601->parse_datetime( '-W155' );
is( $dt->week_number, '15' );
is( $dt->day_of_week, '5' );
}
{
my $dt = $iso8601->parse_datetime( '-W15-5' );
is( $dt->week_number, '15' );
is( $dt->day_of_week, '5' );
}
{
my $dt = $iso8601->parse_datetime( '-W-5' );
is( $dt->day_of_week, '5' );
}
{
my $dt = $iso8601->parse_datetime( '+001985W155' );
is( $dt->ymd, '1985-04-12' );
}
{
my $dt = $iso8601->parse_datetime( '+001985-W15-5' );
is( $dt->ymd, '1985-04-12' );
}
{
my $dt = $iso8601->parse_datetime( '+001985W15' );
is( $dt->ymd, '1985-04-08' );
}
{
my $dt = $iso8601->parse_datetime( '+001985-W15' );
is( $dt->ymd, '1985-04-08' );
}
{
my $dt = $iso8601->parse_datetime( '23:20:50' );
is( $dt->hms, '23:20:50' );
}
{
my $dt = $iso8601->parse_datetime( '23:20' );
is( $dt->hms, '23:20:00' );
}
{
my $dt = $iso8601->parse_datetime( '232050,5' );
is( $dt->hms, '23:20:50' );
is( $dt->nanosecond, 500_000_000 );
}
{
my $dt = $iso8601->parse_datetime( '23:20:50,5' );
is( $dt->hms, '23:20:50' );
is( $dt->nanosecond, 500_000_000 );
}
{
my $dt = $iso8601->parse_datetime( '2320,8' );
is( $dt->hms, '23:20:48' );
}
{
my $dt = $iso8601->parse_datetime( '23:20,8' );
is( $dt->hms, '23:20:48' );
}
{
my $dt = $iso8601->parse_datetime( '23,3' );
is( $dt->hms, '23:18:00' );
}
{
my $dt = $iso8601->parse_datetime( '-20:50' );
is( $dt->minute, '20' );
is( $dt->second, '50' );
}
{
my $dt = $iso8601->parse_datetime( '-2050,5' );
is( $dt->minute, '20' );
is( $dt->second, '50' );
is( $dt->nanosecond, 500_000_000 );
}
{
my $dt = $iso8601->parse_datetime( '-20:50,5' );
is( $dt->minute, '20' );
is( $dt->second, '50' );
is( $dt->nanosecond, 500_000_000 );
}
{
my $dt = $iso8601->parse_datetime( '-20,8' );
is( $dt->minute, '20' );
is( $dt->second, '48' );
}
{
my $dt = $iso8601->parse_datetime( '--50,5' );
is( $dt->second, '50' );
is( $dt->nanosecond, 500_000_000 );
}
{
my $dt = $iso8601->parse_datetime( '232030Z' );
is( $dt->hms, '23:20:30' );
is( $dt->time_zone->name, 'UTC' );
}
{
my $dt = $iso8601->parse_datetime( '232030.5Z' );
is( $dt->hms, '23:20:30' );
is( $dt->nanosecond, 500_000_000 );
is( $dt->time_zone->name, 'UTC' );
}
{
my $dt = $iso8601->parse_datetime( '23:20:30Z' );
is( $dt->hms, '23:20:30' );
is( $dt->time_zone->name, 'UTC' );
}
{
my $dt = $iso8601->parse_datetime( '23:20:30.5Z' );
is( $dt->hms, '23:20:30' );
is( $dt->nanosecond, 500_000_000 );
is( $dt->time_zone->name, 'UTC' );
}
{
my $dt = $iso8601->parse_datetime( '2320Z' );
is( $dt->hms, '23:20:00' );
is( $dt->time_zone->name, 'UTC' );
}
{
my $dt = $iso8601->parse_datetime( '23:20Z' );
is( $dt->hms, '23:20:00' );
is( $dt->time_zone->name, 'UTC' );
}
{
my $dt = $iso8601->parse_datetime( '23Z' );
is( $dt->hms, '23:00:00' );
is( $dt->time_zone->name, 'UTC' );
}
{
my $dt = $iso8601->parse_datetime( '152746+0100' );
is( $dt->hms, '15:27:46' );
is( $dt->time_zone->name, '+0100' );
}
{
my $dt = $iso8601->parse_datetime( '152746-0500' );
is( $dt->hms, '15:27:46' );
is( $dt->time_zone->name, '-0500' );
}
{
my $dt = $iso8601->parse_datetime( '152746.5+0100' );
is( $dt->hms, '15:27:46' );
is( $dt->nanosecond, 500_000_000 );
is( $dt->time_zone->name, '+0100' );
}
{
my $dt = $iso8601->parse_datetime( '152746.5-05:00' );
is( $dt->hms, '15:27:46' );
is( $dt->nanosecond, 500_000_000 );
is( $dt->time_zone->name, '-0500' );
}
{
my $dt = $iso8601->parse_datetime( '152746.05-05:00' );
is( $dt->hms, '15:27:46' );
is( $dt->nanosecond, 50_000_000 );
is( $dt->time_zone->name, '-0500' );
}
{
my $dt = $iso8601->parse_datetime( '15:27:46+01:00' );
is( $dt->hms, '15:27:46' );
is( $dt->time_zone->name, '+0100' );
}
{
my $dt = $iso8601->parse_datetime( '15:27:46-05:00' );
is( $dt->hms, '15:27:46' );
is( $dt->time_zone->name, '-0500' );
}
{
my $dt = $iso8601->parse_datetime( '15:27:46.5+0100' );
is( $dt->hms, '15:27:46' );
is( $dt->nanosecond, 500_000_000 );
is( $dt->time_zone->name, '+0100' );
}
{
my $dt = $iso8601->parse_datetime( '15:27:46.5-05:00' );
is( $dt->hms, '15:27:46' );
is( $dt->nanosecond, 500_000_000 );
is( $dt->time_zone->name, '-0500' );
}
{
my $dt = $iso8601->parse_datetime( '152746+01' );
is( $dt->hms, '15:27:46' );
is( $dt->time_zone->name, '+0100' );
}
{
my $dt = $iso8601->parse_datetime( '152746-05' );
is( $dt->hms, '15:27:46' );
is( $dt->time_zone->name, '-0500' );
}
{
my $dt = $iso8601->parse_datetime( '15:27:46+01' );
is( $dt->hms, '15:27:46' );
is( $dt->time_zone->name, '+0100' );
}
{
my $dt = $iso8601->parse_datetime( '15:27:46-05' );
is( $dt->hms, '15:27:46' );
is( $dt->time_zone->name, '-0500' );
}
{
my $dt = $iso8601->parse_datetime( '19850412T101530' );
is( $dt->iso8601, '1985-04-12T10:15:30' );
is( $dt->time_zone->name, 'floating' );
}
{
my $dt = $iso8601->parse_datetime( '1985-04-12T10:15:30' );
is( $dt->iso8601, '1985-04-12T10:15:30' );
is( $dt->time_zone->name, 'floating' );
}
{
my $dt = $iso8601->parse_datetime( '19850412T101530.5' );
is( $dt->iso8601, '1985-04-12T10:15:30' );
is( $dt->nanosecond, 500_000_000 );
is( $dt->time_zone->name, 'floating' );
}
{
my $dt = $iso8601->parse_datetime( '1985-04-12T10:15:30.5' );
is( $dt->iso8601, '1985-04-12T10:15:30' );
is( $dt->nanosecond, 500_000_000 );
is( $dt->time_zone->name, 'floating' );
}
{
my $dt = $iso8601->parse_datetime( '19850412T101530Z' );
is( $dt->iso8601, '1985-04-12T10:15:30' );
is( $dt->time_zone->name, 'UTC' );
}
{
my $dt = $iso8601->parse_datetime( '1985-04-12T10:15:30Z' );
is( $dt->iso8601, '1985-04-12T10:15:30' );
is( $dt->time_zone->name, 'UTC' );
}
{
my $dt = $iso8601->parse_datetime( '19850412T101530.5Z' );
is( $dt->iso8601, '1985-04-12T10:15:30' );
is( $dt->nanosecond, 500_000_000 );
is( $dt->time_zone->name, 'UTC' );
}
{
my $dt = $iso8601->parse_datetime( '1985-04-12T10:15:30.5Z' );
is( $dt->iso8601, '1985-04-12T10:15:30' );
is( $dt->nanosecond, 500_000_000 );
is( $dt->time_zone->name, 'UTC' );
}
{
my $dt = $iso8601->parse_datetime( '19850412T101530+0400' );
is( $dt->iso8601, '1985-04-12T10:15:30' );
is( $dt->time_zone->name, '+0400' );
}
{
my $dt = $iso8601->parse_datetime( '1985-04-12T10:15:30+04:00' );
is( $dt->iso8601, '1985-04-12T10:15:30' );
is( $dt->time_zone->name, '+0400' );
}
{
my $dt = $iso8601->parse_datetime( '19850412T101530.5+0400' );
is( $dt->iso8601, '1985-04-12T10:15:30' );
is( $dt->nanosecond, 500_000_000 );
is( $dt->time_zone->name, '+0400' );
}
{
my $dt = $iso8601->parse_datetime( '1985-04-12T10:15:30.5+04:00' );
is( $dt->iso8601, '1985-04-12T10:15:30' );
is( $dt->nanosecond, 500_000_000 );
is( $dt->time_zone->name, '+0400' );
}
{
my $dt = $iso8601->parse_datetime( '19850412T101530+04' );
is( $dt->iso8601, '1985-04-12T10:15:30' );
is( $dt->time_zone->name, '+0400' );
}
{
my $dt = $iso8601->parse_datetime( '1985-04-12T10:15:30+04' );
is( $dt->iso8601, '1985-04-12T10:15:30' );
is( $dt->time_zone->name, '+0400' );
}
{
my $dt = $iso8601->parse_datetime( '19850412T1015' );
is( $dt->iso8601, '1985-04-12T10:15:00' );
is( $dt->time_zone->name, 'floating' );
}
{
my $dt = $iso8601->parse_datetime( '1985-04-12T10:15' );
is( $dt->iso8601, '1985-04-12T10:15:00' );
is( $dt->time_zone->name, 'floating' );
}
{
my $dt = $iso8601->parse_datetime( '1985102T1015Z' );
is( $dt->iso8601, '1985-04-12T10:15:00' );
is( $dt->time_zone->name, 'UTC' );
}
{
my $dt = $iso8601->parse_datetime( '1985-102T10:15Z' );
is( $dt->iso8601, '1985-04-12T10:15:00' );
is( $dt->time_zone->name, 'UTC' );
}
{
my $dt = $iso8601->parse_datetime( '1985W155T1015+0400' );
is( $dt->iso8601, '1985-04-12T10:15:00' );
is( $dt->time_zone->name, '+0400' );
}
{
my $dt = $iso8601->parse_datetime( '1985-W15-5T10:15+04' );
is( $dt->iso8601, '1985-04-12T10:15:00' );
is( $dt->time_zone->name, '+0400' );
}
{
my $dt = $iso8601->parse_time( '232050' );
is( $dt->hms, '23:20:50' );
}
{
my $dt = $iso8601->parse_time( '2320' );
is( $dt->hms, '23:20:00' );
}
{
my $dt = $iso8601->parse_time( '23' );
is( $dt->hms, '23:00:00' );
}
{
my $dt = $iso8601->parse_time( '-2050' );
is( $dt->minute, '20' );
is( $dt->second, '50' );
}
{
my $dt = $iso8601->parse_time( '-20' );
is( $dt->minute, '20' );
}
{
my $dt = $iso8601->parse_time( '--50' );
is( $dt->second, '50' );
}