加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java 8 – ZonedDateTime不等于另一个ZonedDateTime

发布时间:2020-12-14 05:56:41 所属栏目:Java 来源:网络整理
导读:我创建了两个ZonedDateTime对象,我认为它们应该是相同的: public static void main(String[] args) { ZoneId zid = ZoneId.of("America/New_York"); ZoneOffset offset = ZoneOffset.from(LocalDateTime.now().atZone(zid)); ZonedDateTime zdt0 = ZonedDat
我创建了两个ZonedDateTime对象,我认为它们应该是相同的:
public static void main(String[] args) {
    ZoneId zid = ZoneId.of("America/New_York");
    ZoneOffset offset = ZoneOffset.from(LocalDateTime.now().atZone(zid));
    ZonedDateTime zdt0 = ZonedDateTime.of(2014,8,24,21,10,1,777000002,offset);
    ZonedDateTime zdt1 = ZonedDateTime.of(2014,zid);
    boolean equals = Objects.equals(zdt0,zdt1);
    System.out.println("equals: " + equals);
}

在调试器中,我看到第一种情况下ZonedDateTime区域的成员类是java.time.ZoneOffset,第二种情况是java.time.ZoneRegion,这使得ZonedDateTime对象不相等.这令人困惑……
有任何想法吗?

解决方法

您正在检查对象相等性,其值为false,因为这些对象不相等.一个绑定到ZoneId,另一个绑定到ZoneOffset.如果要检查它们是否代表同一时间,则可以使用非常直观命名的方法isEqual.

例如.:

ZoneId zid = ZoneId.of("America/New_York");
ZoneOffset offset = ZoneOffset.from(LocalDateTime.now().atZone(zid));
ZonedDateTime zdt0 = ZonedDateTime.of(2014,offset);
ZonedDateTime zdt1 = ZonedDateTime.of(2014,zid);
System.out.println("isEqual:" + zdt0.isEqual(zdt1));
System.out.println("equals: " + zdt0.equals(zdt1));

打印:

isEqual:true
equals: false

顺便说一下,请注意,您不需要为已知的两个对象使用Objects.equals(a,b)非空.您可以直接调用a.equals(b).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读