2017-09-26 84 views
8

我似乎误解了java.util.Date的转换和java.time.Instance。我需要一些遗留的代码,而且这个代码在其API中使用java.util.Date从`java.time.Instant`到`java.util.Date`的转换增加了UTC偏移量

当我在Date API中添加偏移量时,我有些困惑。这是我的理解,Date是UTC时间(“Date类打算反映协调世界时(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使用在这种情况下的偏移量。

+2

'Date.from'不使用偏移量。 *打印*日期值时应用偏移量。 – Andreas

+0

有用的文章,了解发生了什么:https://codeblog.jonskeet.uk/2017/04/23/all-about-java-util-date/ – 2017-09-26 11:46:59

回答

7

DateInstant都不是特定于时区的。 不同之处在于当您打印它们时。

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

Date.toString()将它打印到您当前的时区中。

这就是为什么你看到不同。

+0

当我打印d.getHour()它也返回小时与偏移UTC时间。 – Jens