10

我试图了解如何java.util.Calendar.get(java.util.Calendar.WEEK_OF_YEAR)工作,但似乎我遗漏了一些要点。

String time = "1998-12-31"; // year month day
java.util.Calendar date = java.util.Calendar.getInstance();
date.setTime((new java.text.SimpleDateFormat("yyyy-MM-dd")).parse(time));
System.err.println("Week of year = " + date.get(java.util.Calendar.WEEK_OF_YEAR));
// Week of year = 1 Why ???

为什么date.get(java.util.Calendar.WEEK_OF_YEAR)在一年的最后一周返回 1?

此外,WEEK_OF_YEARfor"1998-01-01"是 1,for"1998-12-23"是 52。
有人对这种行为有解释吗?

4

2 回答 2

12

java.util.Calendar javadoc

第一周

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

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

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

您可以使用Calendar#setMinimalDaysInFirstWeek(int)更改此行为。

于 2012-06-05T08:02:54.303 回答
8
于 2014-02-07T11:57:24.620 回答