2017-09-26 12 views
8

Tôi dường như hiểu sai chuyển đổi của java.util.Date từ và đến java.time.Instance. Tôi có một số mã cũ mà tôi cần phải hoạt động và mã này sử dụng java.util.Date trong API của nó.Chuyển đổi từ `java.time.Instant` sang` java.util.Date` thêm số chênh lệch UTC

Tôi hơi bối rối khi bù đắp được thêm vào API Date. Đó là tôi hiểu rằng Date là một thời gian UTC ("class Date là nhằm phản ánh phối hợp thời gian phổ quát (UTC)"), nhưng khi tôi tạo một Date từ một Instant một bù đắp được thêm vào:

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())); 
    } 
} 

Các xác nhận giữ, nhưng đầu ra trên bàn điều khiển là:

2017-09-26T08:24:40.858Z 
Tue Sep 26 10:24:40 CEST 2017 

Tôi tự hỏi tại sao Date.from sử dụng khoản bù trong trường hợp này.

+2

'Date.from' không sử dụng bù trừ. Giá trị offset được áp dụng khi * in * giá trị 'Date'. – Andreas

+0

Bài viết hữu ích để hiểu điều gì đang xảy ra: https://codeblog.jonskeet.uk/2017/04/23/all-about-java-util-date/ –

Trả lời

7

Date hoặc Instant cả hai đều KHÔNG dành riêng cho múi giờ. Sự khác biệt là khi bạn in chúng.

Instant.toString() in trong biểu diễn ISO-8601 theo múi giờ UTC.

Date.toString() in trong múi giờ hiện tại của bạn.

Đó là lý do bạn thấy sự khác biệt.

+0

Khi tôi in d.getHour(), nó cũng trả về giờ với bù đắp thay vì og giờ UTC. – Jens

Các vấn đề liên quan