tools/source/datetime/datetime.cxx |   15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

New commits:
commit f42a9bf1a4520115954bc25d12d11da841e50b9d
Author:     Eike Rathke <er...@redhat.com>
AuthorDate: Tue Jun 20 15:07:59 2023 +0200
Commit:     Eike Rathke <er...@redhat.com>
CommitDate: Wed Jun 21 16:38:08 2023 +0200

    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 <er...@redhat.com>
    Tested-by: Jenkins
    (cherry picked from commit d3d77d99e3e6f05b232923edc2ea23e513a721d5)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153349

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<const Date&>(rDateTime1)
-        - static_cast<const Date&>(rDateTime2);
-    sal_Int64 nTime = rDateTime1.GetNSFromTime() - rDateTime2.GetNSFromTime();
-    if ( nTime )
+    if (static_cast<const tools::Time&>(rDateTime1) != static_cast<const 
tools::Time&>(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<const Date&>(rDateTime1) - static_cast<const 
Date&>(rDateTime2);
 }
 
 void DateTime::GetWin32FileDateTime( sal_uInt32 & rLower, sal_uInt32 & rUpper 
) const

Reply via email to