RFR: 8225641: Calendar.roll(int field) does not work correctly for WEEK_OF_YEAR [v2]
Justin Lu
jlu at openjdk.org
Fri Mar 24 18:43:36 UTC 2023
On Fri, 24 Mar 2023 18:17:32 GMT, Justin Lu <jlu at openjdk.org> wrote:
>> This PR fixes the bug which occurred when `Calendar.roll(WEEK_OF_YEAR)` rolled into a minimal first week with an invalid `WEEK_OF_YEAR` and `DAY_OF_WEEK` combo.
>>
>> For example, Rolling _Monday, 30 December 2019_ by 1 week produced _Monday, 31 December 2018_, which is incorrect. This is because `WEEK_OF_YEAR` is rolled from 52 to 1, and the original `DAY_OF_WEEK` is 1. However, there is no Monday in week 1 of 2019. This is exposed when a future method calls `Calendar.complete()`, which eventually calculates a `fixedDate` with the invalid `WEEK_OF_YEAR` and `DAY_OF_WEEK` combo.
>>
>> To prevent this, a check is added for rolls into week 1, which determines if the first week is minimal. If it is indeed minimal, then it is checked if `DAY_OF_WEEK` exists in that week, if not, `WEEK_OF_YEAR` must be incremented by one.
>>
>> After the fix, Rolling _Monday, 30 December 2019_ by 1 week produces _Monday, 7 January 2019_
>
> Justin Lu has updated the pull request incrementally with two additional commits since the last revision:
>
> - Test all possible min week and first day of week combos for bugged date
> - Add safety check that amount is positive
The test currently tests 343 combinations for rolling from the end of the year into week 1
Before patch:
[ JUnit Tests: found 343, started 343, succeeded 308, failed 35, aborted 0, skipped 0]
After patch:
[ JUnit Tests: found 343, started 343, succeeded 343, failed 0, aborted 0, skipped 0]
-------------
PR Comment: https://git.openjdk.org/jdk/pull/13031#issuecomment-1483252698
More information about the core-libs-dev
mailing list