Dag*_*Dag 19 java timezone datetime java-8
至于我可以研究,UTC和祖鲁是一样的.但是,我在比较我在代码中从不同来源收到的两个ZonedDateTime时遇到了困难.以下代码说明了该问题:
@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
}
Run Code Online (Sandbox Code Playgroud)
问题:
java.lang.AssertionError: expected:<2015-02-01T14:30Z[UTC]> but was:<2015-02-01T14:30Z>
Run Code Online (Sandbox Code Playgroud)
那么创建和比较基于UTC的值的正确方法是什么呢?
根据W3C 日期和时间格式:
时间以UTC(协调世界时)表示,带有特殊的UTC指示符("Z").
Ste*_*n C 20
根据源代码,ZonedDateTime.equals用于ZoneId.equals比较区域id组件,然后比较id而不是偏移.
如果你想让两个带有"不同但等效"区域id的ZonedDateTime比较相等,你应该像这样创建它们:
ZonedDateTime zdtUtc = ZonedDateTime.of(
2015, 2, 1, 14, 30, 0, 0, ZoneId.of("UTC").normalized());
ZonedDateTime zdtZ = ZonedDateTime.of(
2015, 2, 1, 14, 30, 0, 0, ZoneId.of("Z").normalized());
Run Code Online (Sandbox Code Playgroud)
我认为这是一种情况,您的期望(基于字符串表示的W3C文档)不符合Java类的文档语义.在这种情况下,javadoc是确定的.
(这不是Java 8的错误,IMO.)