Java8 新特性 之 新时间日期 API

目录

Java8 新特性 之 Lambda表达式

Java8 新特性 之 函数式接口

Java8 新特性 之 方法引用与构造器引用

Java8 新特性 之 Stream API

Java8 新特性 之 新时间日期 API

Java8中的LocalDateTime 工具使用

Java8 新特性 之 接口中的默认方法与静态方法

Java8 新特性 之 其他新特性

Java8 新特性 之 集合的底层源码实现:ArrayList、LinkedList、Vector、HashMap、Hashtable


如果我们可以跟别人说:“我们在1502643933071见面,别晚了!”那么就再简单不过了。但是我们希望时间与昼夜和四季有关,于是事情就变复杂了。JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用了。而Calendar并不比Date好多少。它们面临的问题是:

可变性:像日期和时间这样的类应该是不可变的。

偏移性:Date中的年份是从1900开始的,而月份都从0开始。

格式化:格式化只对Date有用,Calendar则不行。

此外,它们也不是线程安全的;不能处理闰秒等。

总结:对日期和时间的操作一直是Java程序员最痛苦的地方之一。

  • 第三次引入的API是成功的,并且java 8中引入的java.time API 已经纠正了过去的缺陷,将来很长一段时间内它都会为我们服务。
  • Java 8 吸收了 Joda-Time 的精华,以一个新的开始为 Java 创建优秀的 API。新的 java.time 中包含了所有关于本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类。历史悠久的 Date 类新增了 toInstant() 方法,用于把 Date 转换成新的表示形式。这些新增的本地化时间日期 API 大大简化了日期时间和本地化的管理。
  • java.time – 包含值对象的基础包
  • java.time.chrono – 提供对不同的日历系统的访问
  • java.time.format – 格式化和解析时间和日期
  • java.time.temporal – 包括底层框架和扩展特性
  • java.time.zone – 包含时区支持的类

说明:大多数开发者只会用到基础包和format包,也可能会用到temporal包。因此,尽管有68个新的公开类型,大多数开发者,大概将只会用到其中的三分之一。

 

使用 LocalDateLocalTimeLocalDateTime

  • LocalDateLocalTimeLocalDateTime 类的实例是不可变的对象,分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的日期或时间,并不包含当前的时间信息。也不包含与时区相关的信息。

Java8 新特性 之 新时间日期 API_第1张图片

Instant 时间戳

  • 用于“时间戳”的运算。它是以Unix元年(传统的设定为UTC时区197011日午夜时分)开始所经历的描述进行运算
  • 在处理时间和日期的时候,我们通常会想到年,月,日,时,分,秒。然而,这只是时间的一个模型,是面向人类的。第二种通用模型是面向机器的,或者说是连续的。在此模型中,时间线中的一个点表示为一个很大的数,这有利于计算机处理。在UNIX中,这个数从1970年开始,以秒为的单位;同样的,在Java中,也是从1970年开始,但以毫秒为单位。
  • java.time包通过值类型Instant提供机器视图,不提供处理人类意义上的时间单位。Instant表示时间线上的一点,而不需要任何上下文信息,例如,时区。概念上讲,它只是简单的表示自1970年1月1日0时0分0秒(UTC)开始的秒数。因为java.time包是基于纳秒计算的,所以Instant的精度可以达到纳秒级。(1 ns = 10-9 s)   1秒 = 1000毫秒 =10^6微秒=10^9纳秒

 

Duration Period

  • Duration:用于计算两个“时间”间隔
  • Period:用于计算两个“日期”间隔

 

日期的操纵

  • TemporalAdjuster : 时间校正器。有时我们可能需要获取例如:将日期调整到“下个周日”等操作。
  • TemporalAdjusters : 该类通过静态方法提供了大量的常用 TemporalAdjuster 的实现。

例如获取下个周日:

解析与格式化

java.time.format.DateTimeFormatter 类:该类提供了三种

格式化方法:

  • 预定义的标准格式   如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE
  • 语言环境相关的格式   如:ofLocalizedDate(FormatStyle.FULL)
  • 自定义的格式   如:ofPattern(“yyyy-MM-dd hh:mm:ss E”)

方法

描述

ofPattern(String pattern)

静态方法,返回一个指定字符串格式的DateTimeFormatter

format(TemporalAccessor t)

格式化一个日期、时间,返回字符串

parse(CharSequence text)

将指定格式的字符序列解析为一个日期、时间

时区的处理

  • Java8 中加入了对时区的支持,带时区的时间为分别为:

       ZonedDateZonedTimeZonedDateTime

其中每个时区都对应着 ID,地区ID都为 “{区域}/{城市}”的格式

例如 :Asia/Shanghai

  • ZoneId:该类中包含了所有的时区信息
  • getAvailableZoneIds() : 可以获取所有时区时区信息
  • of(id) : 用指定的时区信息获取 ZoneId 对象

与传统日期处理的转换

Java8 新特性 之 新时间日期 API_第2张图片

你可能感兴趣的:(java,java8,Java8,新特性)