java - android.util.GregorianCalendar : will c. add(Calendar.DAY_OF_MONTH, 1) 回滚还是前进?

标签 java android wear-os android-calendar watchface

如果日历是该月的最后一天(例如 7 月 31 日),则会

c.add(Calendar.DAY_OF_MONTH, 1);

将 c 设置为同月(七月)的开始,还是会将 c 提前到下个月(八月)?

最佳答案

查看父类(super class)java.util.Calendar的文档,在名为“字段操作”的部分中(强调我的):

add(f, delta) adds delta to field f. This is equivalent to calling set(f, get(f) + delta) with two adjustments:

Add rule 1. The value of field f after the call minus the value of field f before the call is delta, modulo any overflow that has occurred in field f. Overflow occurs when a field value exceeds its range and, as a result, the next larger field is incremented or decremented and the field value is adjusted back into its range.

因此 add(Calendar.DAY_OF_MONTH, 1) 会将 7 月 31 日更改为8 月 1 日

相反,文档继续:

roll(f, delta) adds delta to field f without changing larger fields. This is equivalent to calling add(f, delta) with the following adjustment:

Roll rule. Larger fields are unchanged after the call. A larger field represents a larger unit of time. DAY_OF_MONTH is a larger field than HOUR.

因此,roll(Calendar.DAY_OF_MONTH, 1) 会将 7 月 31 日更改为7 月 1 日

关于java - android.util.GregorianCalendar : will c. add(Calendar.DAY_OF_MONTH, 1) 回滚还是前进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38407486/

相关文章:

java - 按日期分组,看看日期是不是今天?

java - java.util.stream.Collectors.toMap() 的值函数返回常量值

android - 如何刷新 fragment 页面中的 ListView : Android

Android wear 打包 1 兼容设备

android - 客户端尚未准备好......在 Android Wear 表盘应用中

java - 查找 Galaxy Tab 10.1 的 IP 地址以供应用程序

java - DynamoDb 正在存储值 1 而不是 boolean 值 true

java - Activity 开始后?

Android - 任何允许使用暂停、恢复的计时器组件

android - Android Wear 2.0 和 SmartWatch Android 5.1 之间的区别