6

我的程序获取当前日期,然后在循环中为该日期添加一周并打印出新日期。就像是:

Calendar cal = Calendar.getInstance();
for (int i=0; i < 52; i++) {
cal.add(Calendar.DATE, 7);
// print date out
}

add 方法按我预期的方式工作,直到它到达 12 月 30 日,此时年份从 2012 年跳到 2013 年。

因此,使用今天 2012 年 4 月 16 日的日期,我测试了一些不同的输入:

this - cal.add(Calendar.DATE, 38*7);
yields- "date:1/7/2013"
this - cal.add(Calendar.DATE, 37*7);
yields- "date:12/31/2013"
this - cal.add(Calendar.DATE, 37*7-1);
yields- "date:12/30/2013"
this - cal.add(Calendar.DATE, 37*7-2);
yields- "date:12/29/2012"

所以我注意到年份在 12 月 30 日和 12 月 31 日之前是正确的,然后在回到 1 月时再次更正。这样做有什么原因吗?它与 2012 年是闰年有什么关系还是我误解了 add 方法

4

3 回答 3

5

SimpleDateFormat是用来打印日期并YYYY用来产生年份的吗?如果是这样,那就是问题所在。因为YYYY产生的是周年而不是日历年。由于 2012 年 12 月 30 日在 2013 年的第 1 日历周,YYYY因此生成 2013 年。要获取日历年,yyyy请在SimpleDateFormat格式字符串中使用。

https://bugs.openjdk.java.net/browse/JDK-8194625

于 2019-01-06T18:09:30.573 回答
1
于 2019-01-07T23:06:06.520 回答
0

它应该是:

cal.add(Calendar.DAY_OF_YEAR, 7);

Calendar.DATE与 相同Calendar.DAY_OF_MONTH

于 2012-04-16T20:27:54.310 回答