include/tools/datetime.hxx         |    3 ++
 tools/source/datetime/datetime.cxx |   48 +++++++++++--------------------------
 2 files changed, 18 insertions(+), 33 deletions(-)

New commits:
commit 7e3ddf1e5aae5e4e956495e3d86a8cbf6e251b5e
Author:     Eike Rathke <er...@redhat.com>
AuthorDate: Sat May 27 23:14:30 2023 +0200
Commit:     Eike Rathke <er...@redhat.com>
CommitDate: Sun May 28 03:49:55 2023 +0200

    Factor out DateTime::NormalizeTimeRemainderAndApply(tools::Time& rTime)
    
    Change-Id: Ie520b10baaeb4c94973c44435c3241e5d2254968
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152345
    Reviewed-by: Eike Rathke <er...@redhat.com>
    Tested-by: Jenkins

diff --git a/include/tools/datetime.hxx b/include/tools/datetime.hxx
index 7b78b29bdfc5..dd435e3994ba 100644
--- a/include/tools/datetime.hxx
+++ b/include/tools/datetime.hxx
@@ -83,6 +83,9 @@ public:
     void            AddTime( double fTimeInDays );
     DateTime&       operator +=( const tools::Time& rTime );
     DateTime&       operator -=( const tools::Time& rTime );
+private:
+    void            NormalizeTimeRemainderAndApply( tools::Time& rTime );
+public:
 
     TOOLS_DLLPUBLIC friend DateTime operator +( const DateTime& rDateTime, 
sal_Int32 nDays );
     TOOLS_DLLPUBLIC friend DateTime operator -( const DateTime& rDateTime, 
sal_Int32 nDays );
diff --git a/tools/source/datetime/datetime.cxx 
b/tools/source/datetime/datetime.cxx
index efdb928986c3..47dc0555bc87 100644
--- a/tools/source/datetime/datetime.cxx
+++ b/tools/source/datetime/datetime.cxx
@@ -94,33 +94,37 @@ sal_Int64 DateTime::GetSecFromDateTime( const Date& rDate ) 
const
     }
 }
 
-DateTime& DateTime::operator +=( const tools::Time& rTime )
+void DateTime::NormalizeTimeRemainderAndApply( tools::Time& rTime )
 {
-    tools::Time aTime = *this;
-    aTime += rTime;
-    sal_uInt16 nHours = aTime.GetHour();
-    if ( aTime.GetTime() > 0 )
+    sal_uInt16 nHours = rTime.GetHour();
+    if ( rTime.GetTime() > 0 )
     {
         if (nHours >= 24)
         {
             AddDays( nHours / 24 );
             nHours %= 24;
-            aTime.SetHour( nHours );
+            rTime.SetHour( nHours );
         }
     }
-    else if ( aTime.GetTime() != 0 )
+    else if ( rTime.GetTime() != 0 )
     {
         if (nHours >= 24)
         {
             AddDays( -static_cast<sal_Int32>(nHours) / 24 );
             nHours %= 24;
-            aTime.SetHour( nHours );
+            rTime.SetHour( nHours );
         }
         Date::operator--();
-        aTime = Time( 24, 0, 0 )+aTime;
+        rTime = Time( 24, 0, 0 ) + rTime;
     }
-    tools::Time::operator=( aTime );
+    tools::Time::operator=( rTime );
+}
 
+DateTime& DateTime::operator +=( const tools::Time& rTime )
+{
+    tools::Time aTime = *this;
+    aTime += rTime;
+    NormalizeTimeRemainderAndApply(aTime);
     return *this;
 }
 
@@ -128,29 +132,7 @@ DateTime& DateTime::operator -=( const tools::Time& rTime )
 {
     tools::Time aTime = *this;
     aTime -= rTime;
-    sal_uInt16 nHours = aTime.GetHour();
-    if ( aTime.GetTime() > 0 )
-    {
-        if (nHours >= 24)
-        {
-            AddDays( nHours / 24 );
-            nHours %= 24;
-            aTime.SetHour( nHours );
-        }
-    }
-    else if ( aTime.GetTime() != 0 )
-    {
-        if (nHours >= 24)
-        {
-            AddDays( -static_cast<sal_Int32>(nHours) / 24 );
-            nHours %= 24;
-            aTime.SetHour( nHours );
-        }
-        Date::operator--();
-        aTime = Time( 24, 0, 0 )+aTime;
-    }
-    tools::Time::operator=( aTime );
-
+    NormalizeTimeRemainderAndApply(aTime);
     return *this;
 }
 

Reply via email to