Java8 引入新的日期和时间库,你应该知道
Java8为什么需要引入新的日期和时间库
Date日期输出可读性较差
打印输出的结果:
Date日期的解析、格式化通过JDK自带的api实现较为麻烦,通常会使用第三方的日期时间库,比如:
joda-time
,commons-lang
Java8中提供了哪些日期和时间类
在java.time包中提供了很多新的类,通常主要使用到的是LocalDate
, LocalTime
, LocalDateTime
, ZoneId
, ZoneDateTime
; 关系图如下:
LocaDate这个类本身不包含时间和时区信息,只包含了日期信息;提供了很多方法来获取常用的值:星期几,几月 ...
常用的静态构造LocaDate
方法
LocaDate
常用实例方法
LocalTime只包含时间信息
LocalDateTime 从这个类的名字可以看出是合并了
LocalDate
,LocalTime
,只包含日期和时间,不包含时区信息
构造的方式,可以直接使用静态方法创建,也可以通过LocalDate
,LocalTime
合并
由于LocalDateTime
是LocalDate
, LocalTime
的合并,所以LocalDate
, LocalTime
有的实例方法,基本在LocalDateTime
中都可以找到
ZoneId 用来替代老版本
TimeZone
, 每个ZoneId
都有一个特定的地区标识;
查看所有的地区标识可以进入到ZoneId
源码
ZoneDateTime带有日期、时间、时区信息,是
LocalDateTime
和ZoneId
的组合
经常我们会遇到需要求两个时间之间相差的时间, 如何实现呢?
Java8也提供给了相应的API支持, Duration
、Period
Duration
是通过秒和毫秒来记录时间的长短,所以只能处理两个LocalTime
, DateLocalTime
, ZonedDateTime
; 如果传入的是LocalDate
,将会抛出异常
在这种情况下就可以使用Period
时间日期的更高级的操作
以为对时间日期的修改增加减少都是通过第三方依赖包操作,现在原生API已经支持
有时候我们会遇到需要取本月的最后一天、本月的第一天、调整日期到下一个周日... ;这些需求也能够通过使用
TemporalAdjuster
很好的实现,TemporalAdjuster
能够实现很多定制化的日期操作,Java8在TemporalAdjusters
已经给提供了默认的很多实现。
自定义
TemporalAdjuster
实现获取当天的开始时间和当天的最后时间
解析、格式化
对日期的字符串解析和格式化的操作是常用的,首先看下不用第三方包如何简单的实现日期解析
实现格式化同样也简单
最后一句
本人菜鸟,如果有任何写的不对的地方,欢迎在评论区指出
版权声明: 本文为 InfoQ 作者【Silently9527】的原创文章。
原文链接:【http://xie.infoq.cn/article/296252a7252bb46963f35060c】。文章转载请联系作者。
评论