概述
ZoneId
java.time.ZoneId类表示时区ID
声明:
public abstract class ZoneId implements Serializable
ZoneId可以用于在Instant和LocalDateTime之间转换的规则。 有两种不同类型的ID:
固定偏移量 - 从UTC /格林威治完全解析的偏移量,对所有本地日期时间使用相同的偏移量
地理区域 - 适用于查找UTC /格林威治的偏移量的特定规则集的区域
ZoneId里有一个SHORT_IDS的map,里面包含了我们常用的时区,我们如果想用某个时区,可以在这个map中取出来
如下
public static final Map<String,String> SHORT_IDS
以下是KEY和VALUE
ACT - 澳大利亚/达尔文
澳大利亚/悉尼
AGT - 美洲/阿根廷/布宜诺斯艾利斯
艺术 - 非洲/开罗
AST - 美国/安克拉治
BET - America / Sao_Paulo
BST - 亚洲/达卡
CAT - 非洲/哈拉雷
CNT - America / St_Johns
CST - 美国/芝加哥
CTT - 亚洲/上海
EAT - 非洲/ Addis_Ababa
ECT - 欧洲/巴黎
IET - 美洲/印第安纳州/印第安纳州
IST - 亚洲/加尔各答
JST - 亚洲/东京
麻省理工学院 - 太平洋/阿皮亚
NET - 亚洲/埃里温
NST - 太平洋/奥克兰
PLT - 亚洲/卡拉奇
PNT - 美国/凤凰城
PRT - 美洲/波多黎各
PST - 美国/ Los_Angeles
太平洋岛屿/瓜达尔卡纳群岛
VST - 亚洲/ Ho_Chi_Minh
例:获取上海的时区,上海时区的key为CTT。ZoneId.systemDefault为获取系统默认的时区,也是十分常用的方法
System.out.println(ZoneId.SHORT_IDS.get("CTT"));
System.out.println(ZoneId.systemDefault());
输出:
Asia/Shanghai
Asia/Shanghai
常用方法
static ZoneId of(String zoneId):从传入的zoneId获取ZoneId的实例
static Set getAvailableZoneIds():获取可用的ZoneId,返回一个set集合。可以使用迭代器遍历,或者for循环遍历
例:
Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();
for (String availableZoneId : availableZoneIds) {
System.out.println(availableZoneId);
}
ZonedDateTime
ZonedDateTime表示一个带有时区的日期时间的不可变表示。 此类存储所有日期和时间字段,精度为纳秒,时区为区域偏移量,用于处理模糊的本地日期时间。 例如,“2007-12-03T10:15:30+01:00 Europe/Paris ”可以存储在ZonedDateTime 。
声明:
public final class ZonedDateTime implements Temporal, ChronoZonedDateTime<LocalDate>, Serializable {
实现
可以看作是LocalDateTime和ZoneId 的结合
ZonedDateTime拥有相当于三个独立对象的状态,一个LocalDateTime ,一个ZoneId和解决的ZoneOffset 。 偏移量和本地日期时间用于在必要时定义一个瞬间。 区域ID用于获取偏移量如何以及何时更改的规则。 偏移不能自由设置,因为区域控制哪些偏移是有效的。
这个类是不可变的和线程安全的。
日常使用
// 默认时区获取当前时间
ZonedDateTime zonedDateTime = ZonedDateTime.now();
// 用指定时区获取当前时间,Asia/Shanghai为上海时区
ZonedDateTime zonedDateTime1 = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
//withZoneSameInstant为转换时区,参数为ZoneId
ZonedDateTime zonedDateTime2 = zonedDateTime.withZoneSameInstant(ZoneId.of("America/New_York"));
输出
2020-06-17T11:00:29.716404400+08:00[Asia/Shanghai]
2020-06-17T11:00:29.716404400+08:00[Asia/Shanghai]
2020-06-16T23:00:29.716404400-04:00[America/New_York]
LocalDateTime转ZonedDateTime,只需要使用LocalDateTime的atZone方法,传入一个时区,即可得到对应的ZonedDateTime
例:
LocalDateTime localDateTime=LocalDateTime.now();
ZonedDateTime zonedDateTime3 = localDateTime.atZone(ZoneId.of("Asia/Shanghai"));
最后
以上就是斯文秋天为你收集整理的这么详细的Java8日期时间API,还不赶紧收藏起来(四):ZoneId和ZonedDateTime的全部内容,希望文章能够帮你解决这么详细的Java8日期时间API,还不赶紧收藏起来(四):ZoneId和ZonedDateTime所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复