diff options
author | Eike Rathke <erack@redhat.com> | 2016-01-05 19:13:54 +0100 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2016-01-05 19:29:17 +0100 |
commit | 902c593196741ffec2d096855369313f6bbe756e (patch) | |
tree | 2a0555aec7de54dff4239dbd94090531340d4e82 /sc/source/core | |
parent | 5f981642889b1b9980e98ebccc3150e022a73bed (diff) |
The remaining cases when loading old and wrong ISOWEEKNUM that can't be
mapped to either new WEEKNUM or ISOWEEKNUM now are mapped to
WEEKNUM_OOO(date,mode) with calculations identical to the old and wrong
OOo WEEKNUM.
These WEEKNUM_OOO cases are still wrongly saved as ISOWEEKNUM so can be
read by 5.0 or earlier versions as the old WEEKNUM, which should be
changed for 5.3 or later.
WEEKNUM_OOO is not offered in the Function Wizard to prevent deliberate
usage.
Also reverts the interim unit test change to
sc/qa/unit/data/contentCSV/date-time-functions.csv
that was necessary to catch the error generated by ISOWEEKNUM with two
arguments.
Change-Id: I874c4c7225900f03b879f2947512ae02270cbd4f
Diffstat (limited to 'sc/source/core')
-rw-r--r-- | sc/source/core/inc/interpre.hxx | 1 | ||||
-rw-r--r-- | sc/source/core/tool/interpr2.cxx | 12 | ||||
-rw-r--r-- | sc/source/core/tool/interpr4.cxx | 1 |
3 files changed, 14 insertions, 0 deletions
diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx index eefd16af7b33..f6b5bd89751e 100644 --- a/sc/source/core/inc/interpre.hxx +++ b/sc/source/core/inc/interpre.hxx @@ -620,6 +620,7 @@ void ScGetDay(); void ScGetDayOfWeek(); void ScGetWeekOfYear(); void ScGetIsoWeekOfYear(); +void ScWeeknumOOo(); void ScEasterSunday(); sal_uInt16 GetWeekendAndHolidayMasks( const sal_uInt8 nParamCount, const sal_uInt32 nNullDate, ::std::vector<double>& rSortArray, bool bWeekendMask[ 7 ] ); diff --git a/sc/source/core/tool/interpr2.cxx b/sc/source/core/tool/interpr2.cxx index 1777230b1142..ef2277ada4bd 100644 --- a/sc/source/core/tool/interpr2.cxx +++ b/sc/source/core/tool/interpr2.cxx @@ -205,6 +205,18 @@ void ScInterpreter::ScGetDayOfWeek() } } +void ScInterpreter::ScWeeknumOOo() +{ + if ( MustHaveParamCount( GetByte(), 2 ) ) + { + short nFlag = (short) ::rtl::math::approxFloor(GetDouble()); + + Date aDate = *(pFormatter->GetNullDate()); + aDate += (long)::rtl::math::approxFloor(GetDouble()); + PushInt( (int) aDate.GetWeekOfYear( nFlag == 1 ? SUNDAY : MONDAY )); + } +} + void ScInterpreter::ScGetWeekOfYear() { sal_uInt8 nParamCount = GetByte(); diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx index 36047f8dc875..ca54487515f6 100644 --- a/sc/source/core/tool/interpr4.cxx +++ b/sc/source/core/tool/interpr4.cxx @@ -3701,6 +3701,7 @@ StackVar ScInterpreter::Interpret() case ocGetDayOfWeek : ScGetDayOfWeek(); break; case ocWeek : ScGetWeekOfYear(); break; case ocIsoWeeknum : ScGetIsoWeekOfYear(); break; + case ocWeeknumOOo : ScWeeknumOOo(); break; case ocEasterSunday : ScEasterSunday(); break; case ocNetWorkdays : ScNetWorkdays( false); break; case ocNetWorkdays_MS : ScNetWorkdays( true ); break; |