20170704 Java常用类——关于时间日期的类

参考文献:《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:这是一个枚举类,定义了一月到十二月的枚举值;

你可能感兴趣的:(20170704 Java常用类——关于时间日期的类)