1、zoneId
2、ZoneOffset继承了zoneId
3、ZoneOffset 和 TimeZone区别
ZoneOffset 和 TimeZone 是 Java 编程语言中处理时区信息的两个不同的类。
ZoneOffset 类:
ZoneOffset 是 Java 8 中引入的日期时间 API 的一部分,位于 java.time 包中。
它代表了与协调世界时(UTC)之间的固定时间偏移,以固定的小时和分钟表示。
例如,+02:00 表示时间比协调世界时快 2 小时。
TimeZone 类:
TimeZone 是旧的日期时间 API 中的类,位于 java.util 包中。
它用于表示时区信息,包括时区偏移、夏令时规则等。
TimeZone 类在 Java 1.0 中引入,但在 Java 8 之后,新的日期时间 API 提供了更先进和更安全的替代方案。
关系:
ZoneOffset 和 TimeZone 都与时区有关,但它们表示时区信息的方式不同。
ZoneOffset 表示一个固定的时区偏移,而 TimeZone 表示一个完整的时区,包括可能的夏令时规则。
在新的日期时间 API 中,更推荐使用 ZoneOffset 或 ZoneId(ZoneId 是 ZoneOffset 的父接口,也可以表示命名的时区,比如 “Europe/Paris”)。
如果你必须与旧的代码或库一起工作,可能需要进行一些转换,可以使用 ZoneId.of(“ZoneOffset”) 将 ZoneOffset 转换为 ZoneId。反之亦然。
ZoneOffset是JAVA8的API,他也包含了当地时间和UTC的偏移量。
TimeZone 这个是旧的,它包含了时区信息,偏移量等。
Date 和 LocalDateTime 是 Java 编程语言中处理日期和时间的两个不同的类。
Date 类:
Date 类是 Java 中用于表示日期和时间的类,它在 Java 1.0 中引入,但在 Java 8 之后已被大部分新的日期时间 API 所取代。
Date 类封装了自1970年1月1日UTC(协调世界时)开始的毫秒数。
这个类有一些问题,比如它是可变的,而且存在时区问题,因此在新的应用中更常用其他日期时间类。
LocalDateTime 类:
LocalDateTime 是 Java 8 中引入的日期时间 API 的一部分,位于 java.time 包中。
LocalDateTime 表示不带时区的日期和时间,即它不考虑时差或夏令时等问题。
该类提供了更丰富的日期和时间操作方法,同时是不可变的,因此更适合在多线程环境中使用。
关系:
Date 类和 LocalDateTime 类都用于表示日期和时间,但它们分别属于不同的日期时间 API。
在使用新的日期时间 API 时,推荐使用 LocalDateTime,因为它提供更强大和更安全的操作,并且考虑了一些 Date 类的问题。
如果你必须与旧的代码或库一起工作,可能需要在它们之间进行转换。可以使用 Date 类的 toInstant() 方法将其转换为 Instant,然后再通过 Instant 转换为 LocalDateTime。反之亦然。
小结:Date的老的日期API,LocalDateTime是JDK8的AIP, Date包含了时间戳,并且是UTC+时区的时间。
LocalDateTime 表示不带时区的日期和时间,所以他不用考虑时区带来的问题。
一、ZoneId and Offset
- ZoneId 表示时区,比如上海,北京、京东等等,当然既然知道时区,自然也就知道偏移量。
- ZoneOffset 表示偏移量,就是格林威治/ UTC时间的时区偏移量。这里不包含时区,因为同一个偏移量,可能会有多个时区,比如北京和上海的市区偏移量是一样的,但是他们属于不同的时区
ZoneId.getAvailableZoneIds(); 这个可以获取所有时区
ZoneId and Offset要配合时间类来使用,常用的时间类有下面3种
- ZonedDateTime 使用格林威治/ UTC 的时区偏移量处理具有相应时区的日期和时间。
- OffsetDateTime 使用格林威治/ UTC 的相应时区偏移量处理日期和时间,但不包含时区 ID。
- OffsetTime 使用格林威治/ UTC 的相应时区偏移量处理时间,但不包含时区 ID。
二、ZonedDateTime
ZonedDateTime是结合了LocalDateTime类与zoneId类
前面介绍了LocalDateTime是不包含偏移量,也不好时区,就是一个时间,所以LocalDateTime可以很好的和zoneId或者ZoneOffset类一起使用
下面代码通过LocalDateTime+ZoneId得到ZonedDateTime
LocalDateTime leaving = LocalDateTime.of(2013, Month.JULY, 20, 19, 30);
ZoneId leavingZone = ZoneId.of("America/Los_Angeles");
ZonedDateTime departure = ZonedDateTime

本文探讨了Java中ZoneId、ZoneOffset和TimeZone在处理时区信息方面的差异,重点介绍了ZoneId和ZoneOffset的新旧对比,以及如何在LocalDateTime、ZonedDateTime和OffsetDateTime/OffsetTime类中灵活运用它们处理日期和时间,包括时区转换和偏移量的应用。
最低0.47元/天 解锁文章
352

被折叠的 条评论
为什么被折叠?



