Jim has asked for the wisdom of the Perl Monks concerning the following question:

I expect this test script to print '850' for milliseconds using the CLDR format 'SSS', but it doesn't. What's wrong?

#!perl use v5.16; use strict; use warnings; use DateTime::Format::Epoch; # For parser use DateTime::Format::CLDR; # For formatter use Math::BigInt; my $epoch = DateTime->new( year => 1601, month => 1, day => 1, hour => 0, minute => 0, second => 0, nanosecond => 0, ); my $parser = DateTime::Format::Epoch->new( epoch => $epoch, unit => 1e7, # Hundreds of nanonseconds ); my $timestamp = Math::BigInt->new('0x01_CD_F5_A9_75_38_2F_DF'); # This prints 130030072428507103, which is correct say $timestamp; my $dt = $parser->parse_datetime($timestamp) ->format_cldr('yyyy-MM-ddTHH:mm:ss.SSS'); # This prints 2013-01-18T18:27:22.000, not 2013-01-18T18:27:22.850 say $dt; exit 0;

Replies are listed 'Best First'.
Re: Printing milliseconds using DateTime::Format::Epoch and DateTime::Format::CLDR
by Anonymous Monk on Jun 02, 2014 at 07:06 UTC

    DateTime::Format::CLDR seems to be doing its job so I guess bug in DateTime::Format::Epoch based on

    ... my $fc = DateTime::Format::CLDR->new( pattern => q{yyyy-MM-dd'T'HH:mm:ss.SSS}, ); my $date = $fc->parse_datetime( '2013-01-18T18:27:22.850' ); say 'huh? ', $fc->format_datetime( $date ); say 'huh? ', $parser->format_datetime( $date ); exit 0; __END__ 130030072428507103 2013-01-18T18:27:22.000 huh? 2013-01-18T18:27:22.850 huh? 130030072428500000