Java 8 UTC和祖鲁时间是否相等?

Java 8 UTC和祖鲁时间是否相等?,java,datetime,timezone,java-8,Java,Datetime,Timezone,Java 8,据我所知,UTC和Zulu是一样的。然而,我在比较代码中从不同来源收到的两个ZoneDateTime时遇到了困难。 以下代码说明了该问题: @Test public void equalsOnTimezone() throws Exception { ZonedDateTime zdtUtc = ZonedDateTime.of(2015, 2, 1, 14, 30, 0, 0, ZoneId.of("UTC")); ZonedDateTime zdtZ = ZonedDateT

据我所知,UTC和Zulu是一样的。然而,我在比较代码中从不同来源收到的两个ZoneDateTime时遇到了困难。 以下代码说明了该问题:

@Test
public void equalsOnTimezone() throws Exception {
    ZonedDateTime zdtUtc = ZonedDateTime.of(2015, 2, 1, 14, 30, 0, 0, ZoneId.of("UTC"));
    ZonedDateTime zdtZ = ZonedDateTime.of(2015, 2, 1, 14, 30, 0, 0, ZoneId.of("Z"));
    assertEquals(zdtUtc, zdtZ); // will fail
}
java.lang.AssertionError: expected:<2015-02-01T14:30Z[UTC]> but was:<2015-02-01T14:30Z>
问题是:

@Test
public void equalsOnTimezone() throws Exception {
    ZonedDateTime zdtUtc = ZonedDateTime.of(2015, 2, 1, 14, 30, 0, 0, ZoneId.of("UTC"));
    ZonedDateTime zdtZ = ZonedDateTime.of(2015, 2, 1, 14, 30, 0, 0, ZoneId.of("Z"));
    assertEquals(zdtUtc, zdtZ); // will fail
}
java.lang.AssertionError: expected:<2015-02-01T14:30Z[UTC]> but was:<2015-02-01T14:30Z>
java.lang.AssertionError:应为:但为:
那么,创建和比较基于UTC的值的正确方法是什么

根据W3C:

时间以UTC(协调世界时)表示,带有特殊的UTC指示符(“Z”)

比较分区ID而不是偏移 根据源代码,使用来比较区域id组件,然后依次比较id而不是偏移量

如果希望两个具有“不同但等效”分区ID的分区进行相等比较,则应该这样创建它们,调用

我认为在这种情况下,您的期望(基于W3C的字符串表示文档)与Java类的文档语义不一致。在这种情况下,Javadoc是确定的


(我认为这不是Java 8错误。)

另一个选项是将每个ZoneDateTime转换为一个瞬间,因为这两个瞬间是相等的。是的。。。如果这就是你想要达到的目标。