Calendar.roll 使用 Calendar.DATE 时出现奇怪的结果
Calendar.roll weird result when using Calendar.DATE
今天,在欧洲,日期是 2015 年 10 月 1 日。你能告诉我为什么 运行 此代码显示日期为 2015 年 10 月 31 日吗?
Calendar yesterday = Calendar.getInstance();
yesterday.roll(Calendar.DATE, false);
System.out.println(yesterday.getTime());
Calendar.DATE
表示月中的第几天,而不是一年中的第几天。因此,当月中的某一天向后滚动 1 个单位时,我们实际上是从该月的第一天到最后一天。
引用 roll
Javadoc(强调我的):
Adds or subtracts (up/down) a single unit of time on the given time field without changing larger fields.
并引用 Calendar
Javadoc:
A larger field represents a larger unit of time.
因此,在滚动日期时,此方法不会更改 MONTH 或 YEAR 等字段。
您应该改用 Calendar.DAY_OF_YEAR
:
Calendar yesterday = Calendar.getInstance();
yesterday.roll(Calendar.DAY_OF_YEAR, false);
System.out.println(yesterday.getTime());
今天,在欧洲,日期是 2015 年 10 月 1 日。你能告诉我为什么 运行 此代码显示日期为 2015 年 10 月 31 日吗?
Calendar yesterday = Calendar.getInstance();
yesterday.roll(Calendar.DATE, false);
System.out.println(yesterday.getTime());
Calendar.DATE
表示月中的第几天,而不是一年中的第几天。因此,当月中的某一天向后滚动 1 个单位时,我们实际上是从该月的第一天到最后一天。
引用 roll
Javadoc(强调我的):
Adds or subtracts (up/down) a single unit of time on the given time field without changing larger fields.
并引用 Calendar
Javadoc:
A larger field represents a larger unit of time.
因此,在滚动日期时,此方法不会更改 MONTH 或 YEAR 等字段。
您应该改用 Calendar.DAY_OF_YEAR
:
Calendar yesterday = Calendar.getInstance();
yesterday.roll(Calendar.DAY_OF_YEAR, false);
System.out.println(yesterday.getTime());