从'java.time.Instant'到'java.util.Date'的转换会增加UTC偏移量

2022-09-04 20:34:33

我似乎误解了 从 和 到 .我有一些遗留代码需要处理,并且此代码在其API中使用。java.util.Datejava.time.Instancejava.util.Date

当在API中添加偏移量时,我有点困惑。我的理解是 UTC 时间(“Date 类旨在反映协调世界时 (UTC)”),但是当我从偏移量创建一个时,会添加:DateDateDateInstant

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


答案 1

Date或两者都不特定于时区。区别在于您打印它们的时间。Instant

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

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

这就是为什么你看到了差异。


答案 2

推荐