From d3d77d99e3e6f05b232923edc2ea23e513a721d5 Mon Sep 17 00:00:00 2001 From: Eike Rathke Date: Tue, 20 Jun 2023 15:07:59 +0200 Subject: Use tools::Duration in friend double operator-() if DateTime has Time set Change-Id: Iff3e2aad596fdfd1530c46cdeff28b44e5142517 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153327 Reviewed-by: Eike Rathke Tested-by: Jenkins --- tools/source/datetime/datetime.cxx | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) (limited to 'tools') diff --git a/tools/source/datetime/datetime.cxx b/tools/source/datetime/datetime.cxx index ec2c53673b17..bb4c1ff173a5 100644 --- a/tools/source/datetime/datetime.cxx +++ b/tools/source/datetime/datetime.cxx @@ -196,18 +196,13 @@ DateTime operator +( const DateTime& rDateTime, double fTimeInDays ) double operator -( const DateTime& rDateTime1, const DateTime& rDateTime2 ) { - sal_Int32 nDays = static_cast(rDateTime1) - - static_cast(rDateTime2); - sal_Int64 nTime = rDateTime1.GetNSFromTime() - rDateTime2.GetNSFromTime(); - if ( nTime ) + if (static_cast(rDateTime1) != static_cast(rDateTime2)) { - double fTime = double(nTime); - fTime /= ::tools::Time::nanoSecPerDay; // convert from nanoseconds to fraction - if ( nDays < 0 && fTime > 0.0 ) - fTime = 1.0 - fTime; - return double(nDays) + fTime; + // Use Duration to diminish floating point accuracy errors. + const tools::Duration aDuration( rDateTime2, rDateTime1); + return aDuration.GetInDays(); } - return double(nDays); + return static_cast(rDateTime1) - static_cast(rDateTime2); } void DateTime::GetWin32FileDateTime( sal_uInt32 & rLower, sal_uInt32 & rUpper ) const -- cgit