今天,在欧洲,日期是 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
Java文档:
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());
关于java - 使用 Calendar.DATE 时 Calendar.roll 奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32890282/