gpt4 book ai didi

java 8 - ZonedDateTime 不等于另一个 ZonedDateTime

转载 作者:搜寻专家 更新时间:2023-10-30 21:16:37 28 4
gpt4 key购买 nike

我创建了两个 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, 8, 24, 21, 10, 1, 777000002, zid);
boolean equals = Objects.equals(zdt0, zdt1);
System.out.println("equals: " + equals);
}

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

最佳答案

您正在检查计算结果为 false 的对象相等性,因为这些对象不相等。一个绑定(bind)到 ZoneId,另一个绑定(bind)到 ZoneOffset。如果要检查它们是否表示相同的时间,可以使用命名不太直观的方法isEqual

例如:

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, 8, 24, 21, 10, 1, 777000002, zid);
System.out.println("isEqual:" + zdt0.isEqual(zdt1));
System.out.println("equals: " + zdt0.equals(zdt1));

打印:

isEqual:true
equals: false

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

关于java 8 - ZonedDateTime 不等于另一个 ZonedDateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25793628/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com