从“java.time.Instant”到“java.util.Date”的转换添加了 UTC 偏移量

Conversion from `java.time.Instant` to `java.util.Date` adds UTC offset

我似乎误解了 java.util.Datejava.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 在这种情况下使用偏移量。

DateInstant 均不特定于时区。 区别在于打印它们的时间。

Instant.toString() 以 UTC 时区的 ISO-8601 表示形式打印。

Date.toString() 以您当前的时区打印它。

这就是您看到差异的原因。