tl; dr
Các câu trả lời khác đã lỗi thời kể từ Java 8.
Instant // Represent a moment in UTC.
.parse( "2013-09-29T18:46:19Z" ) // Parse text in standard ISO 8601 format where the `Z` means UTC, pronounces “Zulu”.
.atZone( // Adjust from UTC to a time zone.
ZoneId.of( "Asia/Kolkata" )
) // Returns a `ZonedDateTime` object.
ISO 8601
Định dạng chuỗi của bạn xảy ra tuân thủ tiêu chuẩn ISO 8601 . Tiêu chuẩn này xác định các định dạng hợp lý để biểu thị các giá trị thời gian khác nhau dưới dạng văn bản.
java.time
Cũ java.util.Date
/ .Calendar
và java.text.SimpleDateFormat
các lớp học đã được thay thế bởi khuôn khổ java.time xây dựng vào Java 8 và sau đó. Xem hướng dẫn . Tránh các lớp cũ vì chúng đã được chứng minh là được thiết kế kém, khó hiểu và rắc rối.
Một phần của thiết kế kém trong các lớp cũ đã cắn bạn, trong đó toString
phương thức áp dụng múi giờ mặc định hiện tại của JVM khi tạo biểu diễn văn bản của giá trị thời gian thực sự có trong UTC (GMT); có thiện chí nhưng khó hiểu.
Các lớp java.time sử dụng các định dạng ISO 8601 theo mặc định khi phân tích / tạo các biểu diễn văn bản của các giá trị thời gian. Vì vậy, không cần chỉ định một mô hình phân tích cú pháp.
An Instant
là một khoảnh khắc trên dòng thời gian trong UTC .
Instant instant = Instant.parse( "2013-09-29T18:46:19Z" );
Bạn có thể áp dụng múi giờ khi cần thiết để tạo ZonedDateTime
đối tượng.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( zoneId );