Java calendar additions do not increment the year
I
have a variable that stores the week start date, but when I advance from 2012 to 2013, it doesn’t update the year.
The date and month are added correctly, so it goes correctly from 26/12 to 02/01, but it stays at 2012.
// roll one week forward
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(mPrefsHelper.getWeekStart());
cal.add(Calendar.WEEK_OF_YEAR, 1);
Solution
From java.util.Calendar 的 javadoc
First Week
Calendar defines a locale-specific seven day week using two parameters: the first day of the week and the minimal days in first
week (from 1 to 7). These numbers are taken from the locale resource
data when a Calendar is constructed. They may also be specified
explicitly through the methods for setting their values.When setting or getting the WEEK_OF_MONTH or WEEK_OF_YEAR fields, Calendar must determine the first week of the month or year as a
reference point. The first week of a month or year is defined as the
earliest seven day period beginning on getFirstDayOfWeek() and
containing at least getMinimalDaysInFirstWeek() days of that month or
year. Weeks numbered …, -1, 0 precede the first week; weeks numbered
2, 3,… follow it. Note that the normalized numbering returned by
get() may be different. For example, a specific Calendar subclass may
designate the week before week 1 of a year as week n of the previous
year.
It is locale-specific. In your case, if the week contains the day of the new year, it counts as the first week of the new year.