Kaydet (Commit) a6849326 authored tarafından Damjan Jovanovic's avatar Damjan Jovanovic

#i117989# Basic functions Day(), Hour(), Minute(), and Second() return wrong…

#i117989# Basic functions Day(), Hour(), Minute(), and Second() return wrong results for dates <1900-1-1

Also extended our spreadsheeet test to search through more columns, open spreadsheets
with macros enabled, and added a test for the the Year(), Month(), Day(), Hour(),
Minute(), and Second() functions comparing Calc's formulas vs StarBasic's runtime functions.

Found-by: villeroy
Patch-by: Damjan Jovanovic
üst aec10dff
......@@ -1789,17 +1789,9 @@ RTLFUNC(Val)
sal_Int16 implGetDateDay( double aDate )
{
aDate -= 2.0; // normieren: 1.1.1900 => 0.0
aDate = floor( aDate );
Date aRefDate( 1, 1, 1900 );
if ( aDate >= 0.0 )
{
aDate = floor( aDate );
aRefDate += (sal_uIntPtr)aDate;
}
else
{
aDate = ceil( aDate );
aRefDate -= (sal_uIntPtr)(-1.0 * aDate);
}
aRefDate += (sal_uIntPtr)aDate;
sal_Int16 nRet = (sal_Int16)( aRefDate.GetDay() );
return nRet;
......@@ -2110,8 +2102,6 @@ RTLFUNC(Year)
sal_Int16 implGetHour( double dDate )
{
if( dDate < 0.0 )
dDate *= -1.0;
double nFrac = dDate - floor( dDate );
nFrac *= 86400.0;
sal_Int32 nSeconds = (sal_Int32)(nFrac + 0.5);
......@@ -2136,8 +2126,6 @@ RTLFUNC(Hour)
sal_Int16 implGetMinute( double dDate )
{
if( dDate < 0.0 )
dDate *= -1.0;
double nFrac = dDate - floor( dDate );
nFrac *= 86400.0;
sal_Int32 nSeconds = (sal_Int32)(nFrac + 0.5);
......@@ -2177,8 +2165,6 @@ RTLFUNC(Month)
sal_Int16 implGetSecond( double dDate )
{
if( dDate < 0.0 )
dDate *= -1.0;
double nFrac = dDate - floor( dDate );
nFrac *= 86400.0;
sal_Int32 nSeconds = (sal_Int32)(nFrac + 0.5);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment