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

时间:2017-09-26 08:45:50

标签: java java.util.date

我似乎误解了java.util.Datejava.time.Instance之间的转换。我有一些我需要使用的遗留代码,此代码在其API中使用java.util.Date

Date API中添加偏移时,我感到有些困惑。据我所知,Date是UTC时间(" Date类旨在反映协调世界时(UTC)"),但当我创建DateInstant添加了一个偏移量:

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 个答案:

答案 0 :(得分:11)

DateInstant都不是特定于时区的。 不同的是你打印它们。

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

Date.toString()将其打印在您当前的时区。

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