diff options
author | Eike Rathke <erack@redhat.com> | 2017-05-02 23:08:03 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2017-05-02 23:12:34 +0200 |
commit | 6d424f07701bf26d8fb173563b567d5f097c33e2 (patch) | |
tree | 06c5a0bf2eb4b70668d56bb6e972587b19243627 /basic/source/runtime/methods1.cxx | |
parent | Assert that nMonth and nDay <100 to be representable (diff) | |
download | core-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.cxx | 10 |
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; } |