Tôi hiểu rằng ZonedDateTime
thực sự là phiên bản nâng cao của Instant
. Nó có tất cả dữ liệu mà Instant
có (giá trị chính xác theo thời gian UTC), cộng với thông tin múi giờ. Vì vậy, giả thiết ngây thơ của tôi là một số ZonedDateTime
là mộtInstant
và rằng bất kỳ phương pháp nào tham gia Instant
sẽ vui vẻ thay thế ZonedDateTime
. Hơn nữa, tôi mong đợi isBefore()
, isAfter()
v.v. để hoạt động liên tục giữa Instant
s và ZonedDateTime
s.Khả năng tương thích giữa Instant và ZonedDateTime
Xem tài liệu API cho Instant
và ZonedDateTime
, không có trường hợp nào trong số này xảy ra. Tôi có thể so sánh Instant
s với Instant
s và ZonedDateTime
s với ZonedDateTime
s, nhưng hai lớp dường như không tương thích. Hơn nữa, mã của bên thứ ba như ThreeTen-Extra's Interval
dường như chỉ hoạt động với Instant
s.
Có lý do tại sao Instant
và ZonedDateTime
không có nghĩa là để được trộn lẫn?
Vâng, tài liệu nói rõ ràng rằng nó nên được xem như là một 'LocalDateTime' được kết hợp với một vùng, lưu ý là một' Instant' kết hợp với một vùng. Nó có tất cả các trường ngày-thời gian, không phải là một bù đắp từ một điểm trong UTC. Tại sao bạn mong đợi nó hoạt động khác với tài liệu của nó nói? – RealSkeptic
Bạn có thể chuyển đổi 'ZonedDateTime' thành' Instant' bằng cách sử dụng ['.toInstant()'] (http://docs.oracle.com/javase/8/docs/api/java/time/chrono/ChronoZonedDateTime.html # toInstant--), nhưng để chuyển đổi từ 'Instant' thành' ZonedDateTime', bạn phải sử dụng ['ZonedDateTime.ofInstant'] (http://docs.oracle.com/javase/8/docs/api/java /time/ZonedDateTime.html#ofInstant-java.time.Instant-java.time.ZoneId-) và chỉ định 'ZoneId'. – Powerlord