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.0 +0200
+++ DateTime-0.76/Build.PL 2012-09-25 12:34:19.0 +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.0 +0200
+++ DateTime-0.76/lib/DateTime.pm 2012-09-25 12:30:47.0 +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} / 100 ) }
+sub millisecond { floor( $_[0]-{rd_nanosecs} / 100 ) }
-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.0 +0200
+++ DateTime-0.76/t/03components.t 2012-09-25 09:36:49.0 +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.0 +0200
+++ DateTime-0.76/t/13strftime.t 2012-09-25 09:41:22.0 +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'