accepted Answer by Jon Skeet là chính xác. Câu trả lời này mở rộng trên những ý tưởng đó.
Tránh thừa lớp ngày thời gian
Một số các câu trả lời khác, và câu hỏi, trộn các lớp học di sản ngày thời gian cũ với cái mới. Đó là thực hành không cần thiết và không tốt. Toàn bộ các điểm của các lớp học java.time là để thay thế các lớp học cũ khó hiểu và khó hiểu.
- Bạn làm không cần
java.util.Date
.
- Bạn làm không cần
java.util.Calendar
.
LocalDateTime
chuỗi đầu vào của bạn thiếu bất kỳ thông tin về bù đắp-từ-UTC hoặc múi giờ. Vì vậy, chúng tôi phân tích cú pháp đó thành đối tượng LocalDateTime
.
Để phân tích cú pháp, chúng tôi thay thế không gian ở giữa bằng T
để tuân thủ tiêu chuẩn ISO 8601 cho các định dạng ngày giờ.
String input = "2011-02-18 05:00:00.0".replace(" " , "T");
LocalDateTime ldt = LocalDateTime.parse(input);
LocalTime
Để tập trung vào thời gian của ngày mà không có ngày, yêu cầu một LocalTime
.
LocalTime lt = ldt.toLocalTime();
ZonedDateTime
Lưu ý rằng không ai trong số này là những khoảnh khắc thực tế, không phải là một điểm trên timeline. Nếu không có bối cảnh chênh lệch từ UTC hoặc múi giờ, chúng tôi không biết liệu bạn có ý định 5 giờ sáng ở Auckland NZ hay 5 giờ sáng tại Kolkata IN hoặc 5 giờ sáng tại Paris Pháp hoặc 5 giờ sáng tại Montréal Québec. Mỗi người trong số đó sẽ là những khoảnh khắc rất khác nhau trong thời gian.
Nếu theo ngữ cảnh bạn biết chắc chắn múi giờ dự định, hãy áp dụng nó. Áp dụng ZoneId
để nhận được ZonedDateTime
.
ZoneId z = ZoneId.of("America/Montreal");
ZonedDateTime zdt = ldt.atZone(z);
Từ đó, yêu cầu LocalTime
nếu muốn.
LocalTime lt = zdt.toLocalTime();
Instant
Nếu bạn muốn để thấy rằng cùng một thời điểm trong UTC, trích xuất một Instant
. Lớp Instant
đại diện cho một thời điểm trên dòng thời gian trong UTC với độ phân giải nanoseconds (tối đa chín (9) chữ số của một phần thập phân).
Nói chung, tốt nhất là tập trung vào một số lôgic kinh doanh, ghi nhật ký, lưu trữ dữ liệu và trao đổi dữ liệu của bạn. Tìm hiểu suy nghĩ của UTC là "The One True Time".
Instant instant = zdt.toInstant(); // Same moment, shifted to UTC.
Trước tiên, chúng ta đang nói về phiên bản Java nào? –
@ RafaelR.S.Robles JDK 1.8 – Stanko