栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么ZoneOffset.UTC!= ZoneId.of(“ UTC”)?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么ZoneOffset.UTC!= ZoneId.of(“ UTC”)?

答案来自(强调我的)javadoc

ZoneId


ZoneId用于标识用于在Instant和LocalDateTime之间进行转换的规则。有两种不同的ID类型:

  • 固定偏移量-与UTC /格林威治标准时间完全抵消的偏移量,所有本地日期时间都使用相同的偏移量
  • 地理区域-适用于从UTC /格林威治中查找偏移量的一组特定规则的区域

大多数固定偏移量由ZoneOffset表示。
在任何ZoneId上调用normalized()将确保将固定的偏移量ID表示为ZoneOffset。

…并且来自(强调我的)的javadoc

ZoneId#of

此方法解析ID,产生ZoneId或ZoneOffset。 如果ID为’Z’或以’+’或’-‘开头,则返回ZoneOffset

参数id指定为

"UTC"
,因此它将返回
ZoneId
带有偏移量的a ,该偏移量也以字符串形式表示:

System.out.println(now.withZoneSameInstant(ZoneOffset.UTC));System.out.println(now.withZoneSameInstant(ZoneId.of("UTC")));

输出:

2017-03-10T08:06:28.045Z2017-03-10T08:06:28.045Z[UTC]

使用

equals
比较方法时,将 检查对象是否相等 。由于存在上述差异,因此评估结果为
false

当按照

normalized()
文档中的建议使用方法时,使用的比较
equals
将返回
true
normalized()
并将返回对应的
ZoneOffset

标准化时区ID,并在可能的情况下返回ZoneOffset。

now.withZoneSameInstant(ZoneOffset.UTC)    .equals(now.withZoneSameInstant(ZoneId.of("UTC").normalized())); // true

如文档所述,如果您使用

"Z"
"+0"
作为输入ID,
of
则将
ZoneOffset
直接返回,而无需调用
normalized()

now.withZoneSameInstant(ZoneOffset.UTC).equals(now.withZoneSameInstant(ZoneId.of("Z"))); //truenow.withZoneSameInstant(ZoneOffset.UTC).equals(now.withZoneSameInstant(ZoneId.of("+0"))); //true

要检查 它们是否存储相同的日期时间
,可以改用

isEqual
方法:

now.withZoneSameInstant(ZoneOffset.UTC)    .isEqual(now.withZoneSameInstant(ZoneId.of("UTC"))); // true

样品

System.out.println("equals - ZoneId.of("UTC"): " + nowZoneOffset        .equals(now.withZoneSameInstant(ZoneId.of("UTC"))));System.out.println("equals - ZoneId.of("UTC").normalized(): " + nowZoneOffset        .equals(now.withZoneSameInstant(ZoneId.of("UTC").normalized())));System.out.println("equals - ZoneId.of("Z"): " + nowZoneOffset        .equals(now.withZoneSameInstant(ZoneId.of("Z"))));System.out.println("equals - ZoneId.of("+0"): " + nowZoneOffset        .equals(now.withZoneSameInstant(ZoneId.of("+0"))));System.out.println("isEqual - ZoneId.of("UTC"): "+ nowZoneOffset        .isEqual(now.withZoneSameInstant(ZoneId.of("UTC"))));

输出:

equals - ZoneId.of("UTC"): falseequals - ZoneId.of("UTC").normalized(): trueequals - ZoneId.of("Z"): trueequals - ZoneId.of("+0"): trueisEqual - ZoneId.of("UTC"): true


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516466.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号