2017-11-15 120 views
5

Trong Joda, chúng tôi có thể tính toán năm giữa 2 Datetime sử dụngJava năm giữa 2 khoảnh

Years.between(dateTime1, dateTime2); 

Có cách nào dễ dàng để tìm thấy năm giữa 2 khoảnh khắc bằng cách sử dụng java.time API thay vì không có nhiều logic?

ChronoUnit.YEARS.between(instant1, instant2) 

thất bại:

Exception in thread "main" java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Years 
     at java.time.Instant.until(Instant.java:1157) 
     at java.time.temporal.ChronoUnit.between(ChronoUnit.java:272) 
     ... 
+0

Loại 'Instance1' là gì? –

+0

Chỉ cần cập nhật. Nó là java.time.Instant. – user1578872

+0

Bản sao có thể có của [Làm thế nào tôi có thể tìm thấy số năm giữa hai ngày trong android?] (Https://stackoverflow.com/questions/7906301/how-can-i-find-the-number-of-years-between -two-date-in-android) –

Trả lời

7

Các số năm giữa hai khoảnh khắc được coi undefined (rõ ràng - Tôi đã rất ngạc nhiên bởi điều này), nhưng bạn có thể dễ dàng chuyển đổi khoảnh khắc vào ZonedDateTime và có được một kết quả hữu ích:

Instant now = Instant.now(); 
Instant ago = Instant.ofEpochSecond(1234567890L); 

System.out.println(ChronoUnit.YEARS.between(
    ago.atZone(ZoneId.systemDefault()), 
    now.atZone(ZoneId.systemDefault()))); 

Prints:

8 

I nghi ngờ lý do bạn không thể so sánh trực tiếp phiên bản là vì vị trí của ranh giới năm phụ thuộc vào múi giờ. Điều đó có nghĩa rằng ZoneId.systemDefault() có thể không phải là những gì bạn muốn! ZoneOffset.UTC sẽ là lựa chọn hợp lý, nếu không, nếu có múi giờ có ý nghĩa hơn trong ngữ cảnh của bạn (ví dụ: múi giờ của người dùng sẽ thấy kết quả) bạn muốn sử dụng.

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