Hello,

I am using DateTime::Format::ISO8601-0.06 (perl, v5.10.0 built for
i686-linux-thread-multi-64int-ld).

When I try to parse '2009-W01-1', I get an following error: The
"'day_of_year' parameter ("-2") to DateTime::from_day_of_year did not
pass the 'is between 1 and 366' callback ...
DateTime::from_day_of_year(undef, 'day_of_year', -2, 'year', 2009)"

2009-W01-1 should parse to 2008-12-29.

Matrix of dates for 2009-W01-x:
2009-W01-1 = Err (days = -2) should be 2008-12-29.
2009-W01-2 = Err (days = -1) should be 2008-12-30.
2009-W01-3 = Err (days =  0) should be 2008-12-31.
2009-W01-4 = OK  (days = 1) 2009-01-01. #First Thursday of 2009
2009-W01-5 = OK  (days = 2) 2009-01-02.
2009-W01-6 = OK  (days = 3) 2009-01-03.
2009-W01-7 = OK  (days = 4) 2009-01-04.

Just a guess, but it looks like if the days are <= 0, the day_of_year
parameter should be 365 (366:leap year) + days, and year should be the
previous year (perhaps in _normalize_week()).

Thanks,

Jim


$ perl -MDateTime -MDateTime::Format::ISO8601 -wle '$dtf =
DateTime::Format::ISO8601->new; $dt = $dtf->parse_datetime( "2009-W01-1"
); print $dt->ymd("-")'
The 'day_of_year' parameter ("-2") to DateTime::from_day_of_year did not
pass the 'is between 1 and 366' callback
 at
/usr/local/lib/perl5/site_perl/5.10.0/i686-linux-thread-multi-64int-ld/DateTime.pm
line 589
        DateTime::from_day_of_year(undef, 'day_of_year', -2, 'year',
2009) called at
/usr/local/lib/perl5/site_perl/5.10.0/DateTime/Format/Builder/Parser/Regex.pm
line 128
       
DateTime::Format::Builder::Parser::Regex::make('DateTime::Format::Builder::Parser::Regex=HASH(0x83dd9ac)',
'2009-W01-1', undef, 'HASH(0x83ddce0)') called at
/usr/local/lib/perl5/site_perl/5.10.0/DateTime/Format/Builder/Parser/generic.pm
line 123
       
DateTime::Format::Builder::Parser::generic::__ANON__('DateTime::Format::ISO8601=HASH(0x837bd50)',
'2009-W01-1', 'HASH(0x8067b44)') called at
/usr/local/lib/perl5/site_perl/5.10.0/DateTime/Format/Builder/Parser.pm
line 538
       
DateTime::Format::Builder::Parser::__ANON__('DateTime::Format::ISO8601=HASH(0x837bd50)',
'2009-W01-1', 'HASH(0x8067b44)') called at
/usr/local/lib/perl5/site_perl/5.10.0/DateTime/Format/Builder/Parser.pm
line 443
       
DateTime::Format::Builder::Parser::__ANON__('DateTime::Format::ISO8601=HASH(0x837bd50)',
'2009-W01-1') called at
/usr/local/lib/perl5/site_perl/5.10.0/DateTime/Format/Builder/Parser.pm
line 85
       
DateTime::Format::Builder::Parser::parse('DateTime::Format::Builder::Parser=HASH(0x83d3090)',
'DateTime::Format::ISO8601=HASH(0x837bd50)', '2009-W01-1') called at
/usr/local/lib/perl5/site_perl/5.10.0/DateTime/Format/Builder.pm line 189
       
DateTime::Format::Builder::__ANON__('DateTime::Format::ISO8601=HASH(0x837bd50)',
'2009-W01-1') called at -e line 1
(Should be: 2008-12-29)

...

perl -MDateTime -MDateTime::Format::ISO8601 -wle '$dtf =
DateTime::Format::ISO8601->new; $dt = $dtf->parse_datetime( "2009-W01-4"
); print $dt->ymd("-")'
(OK) 2009-01-01

Reply via email to