Android中Calendar字段设置疑问:set方法指定周五规则及默认值
嘿,这个问题问到点子上了!作为天天跟Android Calendar打交道的开发者,我给你把这两个点讲明白:
一、调用set方法设置Calendar的日期字段为周五时的行为
当你执行calendar.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY)这类代码时,默认逻辑是把日期调整到「最近的周五」,具体分三种情况:
- 如果当前日期本身就是周五,那Calendar的日期不会有任何变化;
- 如果当前日期在周五之前(比如周三、周四),会自动跳到本周的周五(也就是即将到来的那个);
- 如果当前日期在周五之后(比如周六、周日到下周四),会自动跳到上周的周五(已经过去的那个)。
要注意的是,这个「最近」的判断是基于Calendar实例当前的时区和时间基准的——如果你之前手动修改过时区或者时间,结果会跟着调整。
二、未设置Calendar年份或其他字段时的默认值
不管是通过Calendar.getInstance()还是直接实例化GregorianCalendar,只要你没有手动指定年份、月份等字段,所有字段都会默认使用设备当前的系统时间、时区和地区来初始化:
- 年份:默认是当前系统的年份(比如2024年);
- 月份:默认是当前系统的月份(敲黑板!Calendar的月份是从0开始的,1月对应0,12月对应11);
- 日期、时分秒、毫秒:全部对应当前系统的实时时间值;
- 时区:默认是设备的系统时区(比如Asia/Shanghai);
- DAY_OF_WEEK这类计算型字段:会根据当前日期自动算出对应的星期几。
简单说,刚创建的Calendar实例,就是当前时间的「镜像」,所有字段都跟你手机状态栏显示的时间完全对应。
内容的提问来源于stack exchange,提问作者Omar Labib
相关产品推荐
相关产品推荐

