java - 使用 Calendar.DATE 时 Calendar.roll 奇怪的结果

标签 java datetime calendar

今天,在欧洲,日期是 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/

相关文章:

java - 如何使用 JWNL(Wordnet 库)以估计的频率顺序查找同义词?

java - 我们可以在java中设置特定的时间吗

java - 使用 Hadoop 查找包含特定字符串的文件

c# - Java 有运算符 >>> 和 <<< 这有点不同 - 请帮助

javascript - 使用 JavaScript 将客户端日期/时间字符串转换为 JSON 日期/时间字符串

java - Java 有没有支持一年中的季度和星期的 DateTime 库?

linux - 直到 9999 年,Linux cal 命令是否正确?

javascript - 添加 onClick 事件到 zabuto 日历

java - 处理来自 Azure B2C 流的响应

python - 有没有直接的方法来忽略 python datetime 对象的一部分?