3

我有一个存储周开始日期的变量,但是当我从 2012 年前进到 2013 年时,它不会更新年份。

正确添加日期和月份,因此它正确地从 26/12 到 02/01,但它保持为 2012。

// roll one week forward
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(mPrefsHelper.getWeekStart());
cal.add(Calendar.WEEK_OF_YEAR, 1);
4

3 回答 3

1

来自java.util.Calendar的 javadoc

First Week

Calendar 使用两个参数定义特定于语言环境的一周 7 天:一周的第一天和第一周的最少天数(从 1 到 7)。这些数字是在构造日历时从语言环境资源数据中获取的。它们也可以通过设置它们的值的方法明确指定。

在设置或获取 WEEK_OF_MONTH 或 WEEK_OF_YEAR 字段时,Calendar 必须确定月份或年份的第一周作为参考点。一个月或一年的第一周定义为从 getFirstDayOfWeek() 开始并至少包含该月或该年的 getMinimalDaysInFirstWeek() 天的最早 7 天时间段。周数 ..., -1, 0 在第一周之前;第 2 周、第 3 周、... 跟随它。请注意,get() 返回的标准化编号可能不同。例如,一个特定的日历子类可以将一年中第 1 周的前一周指定为上一年的第 n 周。

它是特定于语言环境的。在您的情况下,如果该周包含新年的几天,则将其计为新年的第 1 周。

于 2012-12-24T10:41:13.180 回答
1

道歉,并感谢您的所有回复。我的问题特定于我的代码,在某些时候我正在这样做:

mCalendar.clear();
mCalendar.setFirstDayOfWeek(Calendar.MONDAY);
mCalendar.set(Calendar.WEEK_OF_YEAR, week);
mCalendar.set(Calendar.YEAR, year);

并使用我从以前的代码获得的日期获得的值。

所以它得到了一个日期(比如 1 月 2 日星期三),它有 1 周和 2013 年。它会清除日历并正确设置周和年,但是我然后再次调用这个位,它正在设置年份以某种方式成为 2012 年。在大多数情况下,我基本上已经删除了这段代码,现在它工作正常。

于 2012-12-24T12:14:07.647 回答
1
于 2019-11-23T02:12:06.567 回答