了解java.util.Calendar WEEK_OF_YEAR

我试图了解其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_YEAR因为"1998-01-01"是1,因为"1998-12-23"它是52。

有人对此行为有解释吗?

回答:

从java.util.Calendar javadoc:

第一周

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

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

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

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

以上是 了解java.util.Calendar WEEK_OF_YEAR 的全部内容, 来源链接: utcz.com/qa/424394.html

回到顶部