<URL: https://rt.cpan.org/Ticket/Display.html?id=79845 >
And here is the patch. -Martin
diff -rup DateTime-0.76.orig/Build.PL DateTime-0.76/Build.PL --- DateTime-0.76.orig/Build.PL 2012-07-01 23:55:52.000000000 +0200 +++ DateTime-0.76/Build.PL 2012-09-25 12:34:19.000000000 +0200 @@ -31,7 +31,6 @@ my %module_build_args = ( "Carp" => 0, "DateTime::Locale" => "0.41", "DateTime::TimeZone" => "1.09", - "Math::Round" => 0, "Params::Validate" => "0.76", "Scalar::Util" => 0, "XSLoader" => 0, diff -rup DateTime-0.76.orig/lib/DateTime.pm DateTime-0.76/lib/DateTime.pm --- DateTime-0.76.orig/lib/DateTime.pm 2012-07-01 23:55:52.000000000 +0200 +++ DateTime-0.76/lib/DateTime.pm 2012-09-25 12:30:47.000000000 +0200 @@ -44,7 +44,7 @@ use DateTime::Duration; use DateTime::Helpers; use DateTime::Locale 0.41; use DateTime::TimeZone 1.09; -use Math::Round qw( nearest round ); +use POSIX qw(floor); use Params::Validate 0.76 qw( validate validate_pos UNDEF SCALAR BOOLEAN HASHREF OBJECT ); @@ -824,9 +824,9 @@ sub nanosecond { return $_[0]->{rd_nanosecs}; } -sub millisecond { round( $_[0]->{rd_nanosecs} / 1000000 ) } +sub millisecond { floor( $_[0]->{rd_nanosecs} / 1000000 ) } -sub microsecond { round( $_[0]->{rd_nanosecs} / 1000 ) } +sub microsecond { floor( $_[0]->{rd_nanosecs} / 1000 ) } sub leap_seconds { my $self = shift; @@ -1304,7 +1304,7 @@ sub _format_nanosecs { return sprintf( '%0' . $precision . 'u', - round( $self->{rd_nanosecs} / $divide_by ) + floor( $self->{rd_nanosecs} / $divide_by ) ); } @@ -2647,10 +2647,9 @@ Half a second is 500 milliseconds. =item * $dt->microsecond() Returns the fractional part of the second as microseconds (1E-6 -seconds). This value will be rounded to an integer. +seconds). -Half a second is 500_000 microseconds. This value will be rounded to -an integer. +Half a second is 500_000 microseconds. =item * $dt->nanosecond() diff -rup DateTime-0.76.orig/t/03components.t DateTime-0.76/t/03components.t --- DateTime-0.76.orig/t/03components.t 2012-07-01 23:55:52.000000000 +0200 +++ DateTime-0.76/t/03components.t 2012-09-25 09:36:49.000000000 +0200 @@ -260,14 +260,14 @@ is( $monday->day_of_week, 1, "Monday is $dt->set( nanosecond => 500_000_500 ); is( $dt->nanosecond, 500_000_500, 'nanosecond is 500,000,500' ); - is( $dt->microsecond, 500_001, 'microsecond is 500,001' ); + is( $dt->microsecond, 500_000, 'microsecond is 500,001' ); is( $dt->millisecond, 500, 'millisecond is 500' ); $dt->set( nanosecond => 499_999_999 ); is( $dt->nanosecond, 499_999_999, 'nanosecond is 499,999,999' ); - is( $dt->microsecond, 500_000, 'microsecond is 500,000' ); - is( $dt->millisecond, 500, 'millisecond is 500' ); + is( $dt->microsecond, 499_999, 'microsecond is 499,999' ); + is( $dt->millisecond, 499, 'millisecond is 499' ); $dt->set( nanosecond => 450_000_001 ); @@ -279,7 +279,7 @@ is( $monday->day_of_week, 1, "Monday is is( $dt->nanosecond, 450_500_000, 'nanosecond is 450,500,000' ); is( $dt->microsecond, 450_500, 'microsecond is 450,500' ); - is( $dt->millisecond, 451, 'millisecond is 451' ); + is( $dt->millisecond, 450, 'millisecond is 450' ); } { diff -rup DateTime-0.76.orig/t/13strftime.t DateTime-0.76/t/13strftime.t --- DateTime-0.76.orig/t/13strftime.t 2012-07-01 23:55:52.000000000 +0200 +++ DateTime-0.76/t/13strftime.t 2012-09-25 09:41:22.000000000 +0200 @@ -209,7 +209,7 @@ year => 1999, month => 9, day => 7, hour %M => '02' %N => '123456789' %3N => '123' -%6N => '123457' +%6N => '123456' %10N => '1234567890' %p => 'PM' %r => '01:02:42 PM' @@ -314,5 +314,5 @@ year => 2012, month => 1, day => 10 year => 1999, month => 9, day => 7, hour => 13, minute => 2, second => 42, nanosecond => 00012345678 %N => '012345678' %3N => '012' -%6N => '012346' +%6N => '012345' %10N => '0123456780'