<URL: https://rt.cpan.org/Ticket/Display.html?id=79845 >

On Tue Sep 25 07:27:53 2012, MHASCH wrote:

> To demonstrate that the current rounding behaviour is not
> quite thought through, try:
> 
>   use DateTime 0.76;
>   my $d = DateTime->new(
>     year       =>      2012,
>     month      =>         9,
>     day        =>        25,
>     hour       =>        12,
>     minute     =>        39,
>     second     =>        59,
>     nanosecond => 999876000,
>     time_zone  => 'Europe/Berlin',
>   );
>   print $d->strftime('%H:%M:%S.%3N'), "\n";
> 
> This will print "12:39:59.1000" rather than "12:39:59.999".
> And no, please don't make it print "12:40:00.000" either.
> Rounding is just not the right thing to do by default.

There were a few RT tickets about this and I've thought about it a fair 
bit. I think your solution is right.

This gets really messy with a datetime like 2011-12-31T23:59:59.999

To round properly we'd have to round every single unit, including the 
year! There's really no way to do this in strftime and format_cldr 
anyway, since you can only dictate the formatting _per unit_, so you 
might not even be printing out all the units which need rounding.

Reply via email to