1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
use strict;
use warnings;
use Test::More;
use DateTime::Format::Builder;
# ------------------------------------------------------------------------
sub do_check {
my ( $parser, $date, $values ) = @_;
my $parsed = $parser->parse( 'DateTime::Format::Builder', $date );
isa_ok( $parsed => 'DateTime' );
is( $parsed->year() => $values->[0], "Year is right" );
is( $parsed->month() => $values->[1], "Month is right" );
is( $parsed->day() => $values->[2], "Day is right" );
}
{
my $parser = DateTime::Format::Builder->create_parser(
{
#YYYY-DDD 1985-102
regex => qr/^ (\d{4}) -?? (\d{3}) $/x,
params => [qw( year day_of_year )],
constructor => [ 'DateTime', 'from_day_of_year' ],
},
{
regex => qr/^ (\d{4}) foo (\d{3}) $/x,
params => [qw( year day_of_year )],
constructor => sub {
my $self = shift;
DateTime->from_day_of_year(@_);
},
}
);
my %dates = (
'1985-102' => [ 1985, 4, 12 ],
'2004-102' => [ 2004, 4, 11 ], # leap year
);
for my $date ( sort keys %dates ) {
my $values = $dates{$date};
do_check( $parser, $date, $values );
$date =~ s/-/foo/;
do_check( $parser, $date, $values );
}
}
{
my $parser = DateTime::Format::Builder->create_parser(
{
regex => qr/^ (\d+) $/x,
params => [qw( epoch )],
constructor => [ 'DateTime', 'from_epoch' ]
}
);
my %epochs = (
1057279398 => '2003-07-04T00:43:18',
);
for my $epoch ( sort keys %epochs ) {
my $check = $epochs{$epoch};
my $dt = $parser->parse( 'DateTime::Format::Builder', $epoch );
isa_ok( $dt => 'DateTime' );
is( $dt->datetime => $check, "Epoch of $epoch to $check" );
}
}
pass 'All done';
done_testing();
|