16. 《重学 JAVA》--1.8 新日期类
一、日期类
Java 8 在 java.time 包下提供了很多新的 API。
以下为比较重要的 API:
Local(本地):简化了日期时间的处理,没有时区的问题。
Zoned(时区):通过制定的时区处理日期时间。 具体的 API:
LocalDate:存储不包含时间的日期,比如 2020-01-11。可以用来存储生日,周年纪念日,入职日期,表示一个不可变对象。
LocalTime:存储不包含日期的时间,比如 11:07:03.580,表示一个不可变对象。
LocalDateTime:获取年月日时分秒,表示一个不可变的日期和时间
新的 java.time 包涵盖了所有处理日期,时间,日期/时间,时区,时刻(instants),过程(during)与时钟(clock)的操作。
二、日期类的特点
Java 8 中新的时间与日期 API 中的所有类都是不可变且线程安全的,这与之前的 Date 与 Calendar API 中的恰好相反,那里面像 java.util.Date 以及 SimpleDateFormat 这些关键的类都不是线程安全的。
新的时间与日期 API 中很重要的一点是它定义清楚了基本的时间与日期的概念,比方说,瞬时时间,持续时间,日期,时间,时区以及时间段。
这个库的主包是 java.time,里面包含了代表日期,时间,瞬时以及持续时间的类。它有两个子 package,一个是 java.time.foramt,这个是什么用途就很明显了,还有一个是 java.time.temporal,它能从更低层面对各个字段进行访问。
时区指的是地球上共享同一标准时间的地区。每个时区都有一个唯一标识符,同时还有一个地区/城市(Asia/Tokyo)的格式以及从格林威治时间开始的一个偏移时间。比如说,东京的偏移时间就是+09:00。
OffsetDateTime 类实际上包含了 LocalDateTime 与 ZoneOffset。它用来表示一个包含格林威治时间偏移量(+/-小时:分,比如+06:00 或者-08:00)的完整的日期(年月日)及时间(时分秒,纳秒)。
DateTimeFormatter 类用于在 Java 中进行日期的格式化与解析。与 SimpleDateFormat 不同,它是不可变且线程安全的,如果需要的话,可以赋值给一个静态变量。DateTimeFormatter 类提供了许多预定义的格式器,你也可以自定义自己想要的格式。
版权声明: 本文为 InfoQ 作者【杨鹏Geek】的原创文章。
原文链接:【http://xie.infoq.cn/article/04f8db60fec0cc8c8f334017a】。文章转载请联系作者。
评论