本文共 4827 字,大约阅读时间需要 16 分钟。
Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理。
在旧版的 Java 中,日期时间 API 存在诸多问题,其中有:
非线程安全 − java.util.Date 是非线程安全的,所有的日期类都是可变的,这是Java日期类最大的问题之一。
设计很差 − Java的日期/时间类的定义并不一致,在java.util和java.sql的包中都有日期类,此外用于格式化和解析的类在java.text包中定义。java.util.Date同时包含日期和时间,而java.sql.Date仅包含日期,将其纳入java.sql包并不合理。另外这两个类都有相同的名字,这本身就是一个非常糟糕的设计。
时区处理麻烦 − 日期类并不提供国际化,没有时区支持,因此Java引入了java.util.Calendar和java.util.TimeZone类,但他们同样存在上述所有的问题。
Java 8 在 java.time 包下提供了很多新的 API。以下为两个比较重要的 API:
Local(本地) − 简化了日期时间的处理,没有时区的问题。
Zoned(时区) − 通过制定的时区处理日期时间。
新的java.time包涵盖了所有处理日期,时间,日期/时间,时区,时刻(instants),过程(during)与时钟(clock)的操作。
2.1创建LocalDate的方式有很多种,这里介绍几种最常用的方式:
2.2LocalDate常用方法总结
2.3 通用的 增加 日期的方法
plus(long amountToAdd, TemporalUnit unit) LocalDate 按照后面给定字段添加指定数量的日期
LocalDate now = LocalDate.now(); // 2019-01-15LocalDate plusDate = now.plus(4, ChronoUnit.YEARS); //添加数量4 添加字段 年 System.out.println(plusDate);// 2023-01-15
2.4将日期转成字符串
format (DateTimeFormatter formatter) String 传递一个格式化器
LocalDate now = LocalDate.parse("2019/01/15", DateTimeFormatter.ofPattern("yyyy/MM/dd"));String plusDate = now.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日"));System.out.println(plusDate);// 2019年01月15日
2.5 计算日期的间隔
until(Temporal endExclusive, TemporalUnit unit) long 传一个日期对象 和 间隔类型
public static void main(String[] args) { LocalDate now = LocalDate.now(); // 2019-01-15 LocalDate of = LocalDate.of(1989, 07, 02); long until = now.until(of, ChronoUnit.MONTHS); // 间隔 月 System.out.println(until); // -354}
3.1LocaLDate -> Date 的过程是LocaLDate -> ZonedDateTime -> Instant -> Date
public static void main(String[] args) { LocalDate now = LocalDate.now(); ZonedDateTime zdt = now.atStartOfDay(ZoneId.systemDefault()); Instant instant = zdt.toInstant(); Date from = Date.from(instant);}
3.2 Date -> LocalDate 的过程是和上面相反 Date -> Instant -> ZoneDateTime -> LocalDate
public static void main(String[] args) { Date date = new Date(); Instant instant = date.toInstant(); ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault()); LocalDate localDate = zdt.toLocalDate();}
4.1创建LocalTime的方式有很多种,这里介绍几种最常用的方式:
4.2 LocalTime常用方与LocatDate的同名方法作用相同,只是区分出LocatTime仅仅是操作时间的就行。
4.3 LocalTime 转 LocalDateTime
LocalDateTime atDate (LocalDate date) // 传递一个LocalDate可转成LocalDateTIme
5.1创建LocalDateTIme的方式有很多种,这里介绍几种最常用的方式:
5.2 LocalDateTIme常用方与LocatDate的同名方法作用相同,LocalDateTIme可以获取所有的字段信息,并且可以转换成LocalDate和LocalTime。
大部分使用的方法几乎都在上面了,其他Time相关API可以在使用的时自行查找。
(完)
转载地址:http://gqhgf.baihongyu.com/