[rt.cpan.org #79845] [PATCH] sub-second precision and rounding

[email protected] ("Dave Rolsky via RT")
Newsgroups perl.datetime
Message-ID <[email protected]>
<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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.