LocalDate
该类的实例是一个不 可变对象,它只提供了简单的日期,并不含当天的时间信息。另外,它也不附带任何与时区相关 10 的信息。
所有日期时间类,这些类都提供了类似的工厂方法。你还可以通过传递一个TemporalField参数给get方法拿到同样的信息。TemporalField是一个接口,它定 义了如何访问temporal对象某个字段的值。ChronoField枚举实现了这一接口,所以你可以很 方便地使用get方法得到枚举元素的值,如下所示。 使用TemporalField读取LocalDate的值
LocalTime
类似地,一天中的时间,比如13:45:20,可以使用LocalTime类表示。你可以使用of重载的 两个工厂方法创建LocalTime的实例。第一个重载函数接收小时和分钟,第二个重载函数同时还 接收秒。
合并日期和时间LocalDateTime
这个复合类名叫LocalDateTime,是LocalDate和LocalTime的合体。它同时表示了日期 和时间,但不带有时区信息,你可以直接创建,也可以通过合并日期和时间对象构造,
Instant
新的java.time.Instant类对时间建模的方 式,基本上它是以Unix元年时间(传统的设定为UTC时区1970年1月1日午夜时分)开始所经历的 秒数进行计算。
Duration
可以创建两个LocalTimes对象、两个LocalDateTimes对象,或者两个Instant对象之间的duration,如下所示:
由于LocalDateTime和Instant是为不同的目的而设计的,一个是为了便于人阅读使用, 另一个是为了便于机器处理,所以你不能将二者混用。
Period
Period类。使用该类的工厂方法between,你可以使用得到两个LocalDate之间的时长,如下所示:
操纵、解析和格式化日期
- withAttribute方法会创建对象的一个副本,并按照需要修改它的属性。
格式化以及解析日期时间对象是另一个非常重要的功能。新的 java.time.format包就是特别为这个目的而设计的。 和老的java.util.DateFormat相比较,所有的DateTimeFormatter实例都是线程安全 的。
- 创建格式器最简单的方法是通过它的静态工厂方法以及常量
- 按照某个模式创建DateTimeFormatter
- 创建一个本地化的DateTimeFormatter
- DateTimeFormatterBuilder 如果你还需要更加细粒度的控制,DateTimeFormatterBuilder类还提供了更复杂 的格式器,你可以选择恰当的方法,一步一步地构造自己的格式器。
处理不同的时区和历法
新的java.time.ZoneId 类是老版java.util.TimeZone的替代品。跟其他日期和时间类一 样,ZoneId类也是无法修改的。
- 通过ZoneId,你还可以将LocalDateTime转换为Instant:
使用别的日历系统
ISO-8601日历系统是世界文明日历系统的事实标准。但是,Java 8中另外还提供了4种其他的 日历系统。这些日历系统中的每一个都有一个对应的日志类,分别是ThaiBuddhistDate、 MinguoDate 、 JapaneseDate 以 及 HijrahDate 。 所 有 这 些 类 以 及 LocalDate 都 实 现 了 ChronoLocalDate接口,能够对公历的日期进行建模。