summaryrefslogtreecommitdiffstats
path: root/basic/source/runtime/methods1.cxx
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2017-05-02 23:08:03 +0200
committerEike Rathke <erack@redhat.com>2017-05-02 23:12:34 +0200
commit6d424f07701bf26d8fb173563b567d5f097c33e2 (patch)
tree06c5a0bf2eb4b70668d56bb6e972587b19243627 /basic/source/runtime/methods1.cxx
parentAssert that nMonth and nDay <100 to be representable (diff)
downloadcore-6d424f07701bf26d8fb173563b567d5f097c33e2.tar.gz
core-6d424f07701bf26d8fb173563b567d5f097c33e2.zip
Replace mouth-painted "inaccurate around leap year" rollover algorithm
... with proper tools::Date methods Normalize() and AddMonths(). Also prepare functionality to easily switch on rollover for StarBASIC as well, i.e. when called by DateSerial() runtime function. For StarBASIC, invalid date for day > daysinmonthofyear is now (or better since a previous commit 94bb96ada421b423e9ed30526fe5a6aac95f00b9 from today) properly detected, not just dumb 1<=day<=31. Change-Id: Ibb44f7247726f1e1168f0e66c5ae18e073d19f08
Diffstat (limited to 'basic/source/runtime/methods1.cxx')
-rw-r--r--basic/source/runtime/methods1.cxx10
1 files changed, 5 insertions, 5 deletions
diff --git a/basic/source/runtime/methods1.cxx b/basic/source/runtime/methods1.cxx
index 650c0d92fdc9..f3502fe3465a 100644
--- a/basic/source/runtime/methods1.cxx
+++ b/basic/source/runtime/methods1.cxx
@@ -2075,7 +2075,7 @@ RTLFUNC(DateAdd)
sal_Int32 nTargetYear = lNumber + nYear;
nTargetYear16 = limitToINT16( nTargetYear );
nTargetMonth = nMonth;
- bOk = implDateSerial( nTargetYear16, nTargetMonth, nDay, false, dNewDate );
+ bOk = implDateSerial( nTargetYear16, nTargetMonth, nDay, false, true, dNewDate );
break;
}
case INTERVAL_Q:
@@ -2119,7 +2119,7 @@ RTLFUNC(DateAdd)
nTargetYear = (sal_Int32)nYear + nYearsAdd;
}
nTargetYear16 = limitToINT16( nTargetYear );
- bOk = implDateSerial( nTargetYear16, nTargetMonth, nDay, false, dNewDate );
+ bOk = implDateSerial( nTargetYear16, nTargetMonth, nDay, false, true, dNewDate );
break;
}
default: break;
@@ -2134,7 +2134,7 @@ RTLFUNC(DateAdd)
while( nNewMonth > nTargetMonth )
{
nCorrectionDay--;
- implDateSerial( nTargetYear16, nTargetMonth, nCorrectionDay, false, dNewDate );
+ implDateSerial( nTargetYear16, nTargetMonth, nCorrectionDay, false, true, dNewDate );
implGetDayMonthYear( nNewYear, nNewMonth, nNewDay, dNewDate );
}
dNewDate += dHoursMinutesSeconds;
@@ -2329,7 +2329,7 @@ double implGetDateOfFirstDayInFirstWeek
nFirstWeekMinDays = 7; // vbFirstFourDays
double dBaseDate;
- implDateSerial( nYear, 1, 1, false, dBaseDate );
+ implDateSerial( nYear, 1, 1, false, false, dBaseDate );
sal_Int16 nWeekDay0101 = implGetWeekDay( dBaseDate );
sal_Int16 nDayDiff = nWeekDay0101 - nFirstDay;
@@ -2392,7 +2392,7 @@ RTLFUNC(DatePart)
{
sal_Int16 nYear = implGetDateYear( dDate );
double dBaseDate;
- implDateSerial( nYear, 1, 1, false, dBaseDate );
+ implDateSerial( nYear, 1, 1, false, false, dBaseDate );
nRet = 1 + sal_Int32( dDate - dBaseDate );
break;
}