tl; dr
myGregCal.toZonedDateTime().toEpochSecond() // Convert from troublesome legacy `GregorianCalendar` to modern `ZonedDateTime`.
Và đi theo một hướng khác ...
GregorianCalendar.from( // Convert from modern `ZonedDateTime` to troublesome legacy class `GregorianCalendar`.
Instant.ofEpochSecond(yourCountOfWholeSecondsSinceEpoch) // Moment in UTC.
.atZone( // Apply `ZoneId` to `Instant` to produce a `ZonedDateTime` object.
ZoneId.of("Africa/Tunis")
)
)
Tránh thừa lớp ngày thời gian
Các câu trả lời khác là chính xác và ngắn. Nhưng, FYI, các lớp học ngày thời gian cũ phiền hà như java.util.Date
, java.util.Calendar
, và java.text.SimpleDateFormat
hiện nay legacy, thay thế bởi sự java.time class built vào Java 8 & Java 9.
Vì vậy, đây là làm thế nào để chuyển đổi và sử dụng hiện đại thay vào đó là các lớp học cho vấn đề của bạn.
java.time
Chuyển đổi từ lớp di sản GregorianCalendar
đến lớp hiện đại ZonedDateTime
. Gọi các phương thức mới được thêm vào các lớp cũ.
ZonedDateTime zdt = myGregCal.toZonedDateTime() ;
Và đi theo một hướng khác ...
GregorianCalendar myGregCal = GregorianCalendar.from(zdt) ;
Nếu bởi “Unix time” bạn có nghĩa là một số của toàn bộ giây kể từ khi epoch reference của giây phút đầu tiên của năm 1970 tại UTC, 1970-01-01T00: 00: 00Z , sau đó gọi toEpochSecond
.
long secondsSinceEpoch = zdt.toEpochSecond() ;
Nếu bạn có nghĩa là đếm mili giây từ năm 1970 bắt đầu bằng UTC, sau đó trích xuấ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).
Instant instant = zdt.toInstant() ;
Bây giờ ask for the count of milliseconds.
long millisecondsSinceEpoch = instant.toEpochMill() ;
Hãy nhớ rằng toàn bộ giây hoặc milliseconds có thể liên quan đến mất dữ liệu. Các số ZonedDateTime
và Instant
đều giải quyết thành nano giây. Vì vậy, bất kỳ microseconds hoặc nano giây nào có thể có mặt sẽ bị bỏ qua khi bạn đếm toàn bộ giây hoặc mili giây.
Về java.time
Khung java.time được xây dựng vào Java 8 và sau đó. Các lớp này thay thế các lớp học ngày giờ legacy phiền hà cũ như java.util.Date
, Calendar
, & SimpleDateFormat
.
Dự án Joda-Time, hiện đang ở maintenance mode, khuyên di chuyển đến các lớp java.time.
Để tìm hiểu thêm, hãy xem Oracle Tutorial. 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.
Sử dụng JDBC driver tương thích với JDBC 4.2 hoặc cao hơn, bạn có thể trao đổi java.time đối tượng trực tiếp với cơ sở dữ liệu của bạn. Không cần chuỗi và các lớp java.sql. *.
Nơi lấy các lớp java.time?
Dự án mở rộng ThreeTen-Extra java.time với các lớp bổ sung. Dự án này là một nền tảng chứng minh cho những bổ sung có thể có trong tương lai vào java.time. Bạn có thể tìm thấy một số lớp học hữu ích tại đây như Interval
, YearWeek
, YearQuarter
và more.
+1 cho thời gian joda –
Xin cảm ơn. Tôi chỉ cần mã bạn viết. Cảm ơn rất nhiều! – androidNoob
Kể từ khi nào thời gian unix không có mili giây? – Pacerier