tl; dr
ZonedDateTime.now(
ZoneId.of( "America/Montreal" )
)
… Của múi giờ mặc định hiện tại…
ZonedDateTime.now(
ZoneId.systemDefault()
)
Chi tiết
Câu trả lời của Stanislav Bshkyrtsev trả lời chính xác và trực tiếp Câu hỏi của bạn.
Tuy nhiên, có những vấn đề lớn hơn liên quan, như được đề xuất trong Câu trả lời của Jon Skeet .
LocalDateTime
Tôi không tìm thấy cách chuyển đổi epoch giây thành LocalDateTime
LocalDateTime
cố tình không có khái niệm về múi giờ hoặc chênh lệch từ UTC. Không có khả năng những gì bạn muốn. Có Local…
nghĩa là bất kỳ địa phương nào , không phải bất kỳ địa phương cụ thể nào. Lớp này không đại diện cho một khoảnh khắc, chỉ những khoảnh khắc tiềm năng trong khoảng 26-27 giờ (phạm vi của múi giờ trên toàn cầu).
Instant
Không cần bắt đầu bằng giây kỷ nguyên nếu bạn đang cố lấy thời gian hiện tại. Nhận hiện tại Instant
. Các Instant
lớp đại diện cho một thời điểm trên Timeline trong UTC với độ phân giải nano giây (lên đến chín (9) chữ số của một phân số thập phân).
Instant instant = Instant.now();
Bên trong đó Instant
là số lượng nano giây -từ kỷ nguyên. Nhưng chúng tôi không thực sự quan tâm.
ZonedDateTime
Nếu bạn muốn xem khoảnh khắc đó qua lăng kính đồng hồ treo tường của một khu vực cụ thể, hãy áp dụng a ZoneId
để lấy a ZonedDateTime
.
ZoneId z = ZoneId.of( "Europe/Paris" );
ZonedDateTime zdt = instant.atZone( z );
Là một phím tắt, bạn có thể thực hiện trực tiếp với ZonedDateTime
.
ZonedDateTime zdt = ZonedDateTime.now( z );
A ZonedDateTime
có một Instant
bên trong nó. Gọi zdt.toInstant()
để nhận được đúng thời điểm giống như một giá trị cơ bản trong UTC . Cùng một số nano giây-kể từ kỷ nguyên theo cách nào đó, dưới dạng a ZonedDateTime
hoặc a Instant
.
Số giây kể từ kỷ nguyên đã cho
Nếu bạn được cung cấp số giây kể từ kỷ nguyên và kỷ nguyên là thời điểm đầu tiên của năm 1970 trong UTC ( 1970-01-01T00:00:00Z
), thì hãy nạp số đó vào Instant
.
long secondsSinceEpoch = 1_484_063_246L ;
Instant instant = Instant.ofEpochSecond( secondsSinceEpoch ) ;
Giới thiệu về java.time
Khung java.time được tích hợp sẵn trong Java 8 trở lên. Những lớp học thay thế cái cũ phiền hà di sản lớp học ngày thời gian như java.util.Date
, Calendar
, & SimpleDateFormat
.
Để tìm hiểu thêm, hãy xem Hướng dẫn Oracle . Và tìm kiếm Stack Overflow cho nhiều ví dụ và giải thích. Đặc điểm kỹ thuật là JSR 310 .
Các Joda thời gian dự án, bây giờ trong chế độ bảo trì , khuyên chuyển đổi sang các java.time lớp.
Bạn có thể trao đổi các đối tượng java.time trực tiếp với cơ sở dữ liệu của mình. Sử dụng trình điều khiển JDBC tương thích với JDBC 4.2 trở lên. Không cần chuỗi, không cần java.sql.*
lớp.
Lấy các lớp java.time ở đâu?
Các ThreeTen-Extra dự án mở rộng java.time với các lớp bổ sung. Dự án này là cơ sở chứng minh cho những bổ sung có thể có trong tương lai cho java.time. Bạn có thể tìm thấy một số các lớp học hữu ích ở đây chẳng hạn như Interval
, YearWeek
, YearQuarter
, và nhiều hơn nữa .
import java.time.{Instant, LocalDateTime, ZoneId, ZoneOffset}
hoạt động? Đó làunexpected token
đối với tôi trong Java 11.