从“java.time.Instant”到“java.util.Date”的转换添加了 UTC 偏移量
Conversion from `java.time.Instant` to `java.util.Date` adds UTC offset
我似乎误解了 java.util.Date
与 java.time.Instance
的转换。我有一些遗留代码需要与之交互,此代码在其 API.
中使用 java.util.Date
当在 Date
API 中添加偏移量时,我有点困惑。据我了解,Date
是 UTC 时间 ("the Date class is intended to reflect coordinated universal time (UTC)"),但是当我从 Instant
创建一个 Date
时,添加了一个偏移量:
public class TestDateInstant {
@Test
public void instantdate() {
Instant i = Instant.now();
System.out.println(i);
Date d = Date.from(i);
System.out.println(d);
assertThat(i, equalTo(d.toInstant()));
}
}
断言成立,但控制台上的输出是:
2017-09-26T08:24:40.858Z
Tue Sep 26 10:24:40 CEST 2017
我想知道为什么 Date.from
在这种情况下使用偏移量。
Date
或 Instant
均不特定于时区。
区别在于打印它们的时间。
Instant.toString()
以 UTC 时区的 ISO-8601 表示形式打印。
Date.toString()
以您当前的时区打印它。
这就是您看到差异的原因。
我似乎误解了 java.util.Date
与 java.time.Instance
的转换。我有一些遗留代码需要与之交互,此代码在其 API.
java.util.Date
当在 Date
API 中添加偏移量时,我有点困惑。据我了解,Date
是 UTC 时间 ("the Date class is intended to reflect coordinated universal time (UTC)"),但是当我从 Instant
创建一个 Date
时,添加了一个偏移量:
public class TestDateInstant {
@Test
public void instantdate() {
Instant i = Instant.now();
System.out.println(i);
Date d = Date.from(i);
System.out.println(d);
assertThat(i, equalTo(d.toInstant()));
}
}
断言成立,但控制台上的输出是:
2017-09-26T08:24:40.858Z
Tue Sep 26 10:24:40 CEST 2017
我想知道为什么 Date.from
在这种情况下使用偏移量。
Date
或 Instant
均不特定于时区。
区别在于打印它们的时间。
Instant.toString()
以 UTC 时区的 ISO-8601 表示形式打印。
Date.toString()
以您当前的时区打印它。
这就是您看到差异的原因。