2017-09-26 27 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