summaryrefslogtreecommitdiff
path: root/basic
diff options
context:
space:
mode:
authorDamjan Jovanovic <damjan@apache.org>2015-08-26 02:10:46 +0000
committerCaolán McNamara <caolanm@redhat.com>2015-08-26 12:43:59 +0100
commit94a52f9ffafdf9c6e64ddf1a3587f21a272f2e62 (patch)
treed7d7be0ee74517635865d95a507ed756d135eebb /basic
parentcf4839cfd18bb3c478ee7f039a705e46877e442c (diff)
Resolves: #i117989# Basic functions 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 (cherry picked from commit a68493266e9212119f31e58c256f00fb9bcc8d20) Change-Id: I8f2115c623a1d35db5b7fc8184a9118c3eca6fcd
Diffstat (limited to 'basic')
-rw-r--r--basic/source/runtime/methods.cxx24
1 files changed, 2 insertions, 22 deletions
diff --git a/basic/source/runtime/methods.cxx b/basic/source/runtime/methods.cxx
index d240705608cf..b7dcc98ef56c 100644
--- a/basic/source/runtime/methods.cxx
+++ b/basic/source/runtime/methods.cxx
@@ -1820,17 +1820,9 @@ RTLFUNC(Val)
sal_Int16 implGetDateDay( double aDate )
{
aDate -= 2.0; // standardize: 1.1.1900 => 0.0
+ aDate = floor( aDate );
Date aRefDate( 1, 1, 1900 );
- if ( aDate >= 0.0 )
- {
- aDate = floor( aDate );
- aRefDate += static_cast<long>(aDate);
- }
- else
- {
- aDate = ceil( aDate );
- aRefDate -= static_cast<long>(-1.0 * aDate);
- }
+ aRefDate += static_cast<long>(aDate);
sal_Int16 nRet = (sal_Int16)( aRefDate.GetDay() );
return nRet;
@@ -2270,10 +2262,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);
@@ -2333,10 +2321,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);
@@ -5016,10 +5000,6 @@ bool implDateTimeSerial( sal_Int16 nYear, sal_Int16 nMonth, sal_Int16 nDay,
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);