参考文献:《Java疯狂讲义》(第三版)
java.util.Date类和Calendar工具类
Java提供Date类来处理日期、时间,但是Date是一个设计相当糟糕的类,因此Java官方推荐尽量少用Date类的构造器和方法,可用Calendar工具类
Calendar类
知识点:Calendar类本身是一个抽象类,它是所有日历类的模版,并提供了一些所有日历通用的方法:但它本身不能直接实例化,它是所有日历类的模版,并提供了一些所有日历通用的方法。
Java本身提供了一个GreorianCalendar类,公历类。
Calendar类还有如下几个注意点:
1、add与roll的区别:
add(int field,int amount)的功能非常强大,add主要用于改变Calendar的特点字段的值。如果需要增加某字段的值,则让amount为正数;如果需要减少某字段的值,则让amount为负数即可。
当被修改的字段超过它允许的范围时,roll不会增大,而add会增大。
2、设置Calendar的容错性:
当传入非法参数时,Calendar提供了一个setLenient()方法用于设置它的容错性,关闭时,会出现异常。
通过setLenient来设置Calendar有两种解释日历字段的模式。
3、set()方法延迟修改
set(f,value)方法将日历字段f更改为value,此外它还设置了一个内部成员变量,以只是日历字段f已经被修改。尽管日历字段f是立即被修改的,但Calendar所代表的时间却不会立即修改,直到下次调用才会重新计算日历时间。
优点:采用延迟修改的优势是多次调用set()不会出发多次不必要的计算
Java8新增的日期、时间包
java8专门新增了java.time包,该包下有如下类:
1、Clock:获取指定时区的当前时间;
2、Duration:代表了持续时间;
3、Instant:代表了一个具体的时刻,可以精确到纳秒。
4、LocalDate:不带时区的日期;
5、LocalTime:不带时区的时间;
6、LocalDateTime:不带时区的日期、时间;
7、MonthDat:月日;
8、Year:年
9、YearMonth:该类代表年月;
10、ZonedDateTime:该类代表一个时区化的日期、时间;
11、ZoneId:该类代表一个时区。
12、DayOfWeek:这是一个枚举类,定义了周日到周六的枚举值;
13、Month:这是一个枚举类,定义了一月到十二月的枚举值;