我创建了两个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区域成员的类在第一种情况下是java.time.ZoneOffset,在第二种java.time.ZoneRegion中,这使ZonedDateTime对象不相等。这很令人困惑...有什么想法吗?
您正在检查对象相等性,其结果false
是这些对象不相等。一个绑定到一个ZoneId
,另一个绑定到一个ZoneOffset
。如果要检查它们是否表示相同的时间,可以使用不是很直观命名的method 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
顺便说一句,请注意,您不需要使用Objects.equals(a,b)
已经知道不是的两个对象null
。您可以a.equals(b)
直接调用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句