认识Calendar可分为两种,一种入门简单了解的,另一种为深入了解基础,个人查找的。
Java中Calendar类的常用方法
Calendar基础了解
获取时间(get)
1 | // 使用默认时区和语言环境获得一个日历 |
结果为:
1 | 年:2021 |
设置时间(set)
月份的下标从 0 开始,设置时同样需要注意,比如我们设置为 4 月 30 日除夕当晚的倒计时的最后一秒: 2021-04-30 23:59:59
1 | Calendar cal = Calendar.getInstance(); |
细节:如果设置的为1月32号,则时间计算会自动进行换算,跳到2月1号,对于其他换算也是如此。
时间计算(add)
add方法:
比如在金今天(4/7)当晚最后一秒,add 一秒:
1 | Calendar cal = Calendar.getInstance(); |
打印时间结果如下,日期会自动进入下一天:
1 | Wed Apr 07 11:39:16 CST 2021 |
再比如 1 月 30 号的时候,月份加一,会出现怎样结果:(已知2月没有30号)
1 | Calendar cal = Calendar.getInstance(); |
运行结果:
1 | Sun Jan 31 08:00:00 CST 2021 |
说明 add 月份时,会将不存在的日期归为当月日历的最后一天。
学到这对一般的日历用法够了,想继续深入了解可以参照下面
Calendar深入了解
项目当中,我们经常会涉及到对时间的处理。Date 类最主要的作用就是获得当前时间,同时这个类里面也具有设置时间以及一些其他的功能,但是由于本身设计的问题,这些方法却遭到众多批评,不建议使用,而是更推荐使用 Calendar 类进行时间和日期的处理。
原理简介
Calendar类被abstract所修饰,说明不能通过new的方式来获得实例,对此,Calendar提供了一个类方法getInstance,以获得此类型的一个通用的对象,getInstance方法返回一个Calendar对象(该对象为Calendar的子类对象),其日历字段已由当前日期和时间初始化:
1 | Calendar cal = Calendar.getInstance(); |
之所以说返回的是Calendar的子类对象,是因为每个国家地区都有自己的一套日历算法,比如西方国家的第一个星期大部分为星期日,而中国则为星期一。我们来看看getInstance方法获取实例的源码:
1 | public static Calendar getInstance() |
其中参数TimeZone.getDefaultRef()代表的就是时区,createCalendar方法就是根据不同国家地区返回对应的日期子类。
常用方法
为了更加便捷的对日期进行操作,Calendar类对YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。
时间获取
1 | Calendar cal = Calendar.getInstance(); //Calendar类的实例化 |
设置时间与时间计算
基础够了
小结
- Calendar 类区分不同的时区输出时间格式;
- Calendar 类的计算优势非常明显,不需要考虑每个月有多少天,非常便利。举个例子:如果要计算昨天的日期,你要考虑昨天是不是某月的最后一天,某年的最后一天,要考虑平年、闰年,考虑上个月是31天,30天,29天还是28天…但是Calendar类省去了你所有的顾虑,直接减1天就可以输出正确的日期了;