Factor out DateTime::NormalizeTimeRemainderAndApply(tools::Time& rTime)
Change-Id: Ie520b10baaeb4c94973c44435c3241e5d2254968
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152345
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Jenkins
diff --git a/include/tools/datetime.hxx b/include/tools/datetime.hxx
index 7b78b29..dd435e3 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 efdb928..47dc055 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;
}