tl; dr
Instant.ofEpochSecond( 1_280_512_800L )
2010-07-30T18: 00: 00Z
java.time
Khung công tác java.time mới được tích hợp trong Java 8 trở lên là sự kế thừa của Joda-Time.
Các lớp mới này bao gồm một phương thức xuất xưởng tiện dụng để chuyển đổi tổng số giây từ epoch. Bạn nhận được Instant
một khoảnh khắc trên dòng thời gian trong UTC với độ phân giải lên tới nano giây.
Instant instant = Instant.ofEpochSecond( 1_280_512_800L );
tức thì.toString (): 2010-07-30T18: 00: 00Z
Xem mã đó chạy trực tiếp tại IdeOne.com .
Asia/Kabul
hay Asia/Tehran
múi giờ?
Bạn đã báo cáo nhận được giá trị thời gian trong ngày là 22:30 thay vì 18:00 được thấy ở đây. Tôi nghi ngờ tiện ích PHP của bạn đang ngầm áp dụng múi giờ mặc định để điều chỉnh từ UTC. Giá trị của tôi ở đây là UTC, được biểu thị bằng Z
(viết tắt của Zulu
UTC). Bất kỳ cơ hội nào hệ điều hành hoặc PHP máy của bạn được đặt thành Asia/Kabul
hoặc Asia/Tehran
múi giờ? Tôi cho rằng khi bạn báo cáo IRST
trong đầu ra của bạn, điều đó có nghĩa là thời gian của Iran. Hiện tại trong năm 2017, đây là những khu vực duy nhất hoạt động với thời gian mùa hè sớm hơn UTC bốn giờ rưỡi.
Chỉ định một tên múi giờ thích hợp trong các định dạng của continent/region
, chẳng hạn như America/Montreal
, Africa/Casablanca
hoặc Pacific/Auckland
. Không bao giờ sử dụng tên viết tắt 3-4 lá thư như EST
hay IST
hay IRST
vì họ là không khu đúng thời gian, không được chuẩn hóa, và thậm chí không duy nhất (!).
Nếu bạn muốn xem khoảnh khắc của mình qua lăng kính của múi giờ của một khu vực cụ thể, hãy áp dụng a ZoneId
để có được ZonedDateTime
. Vẫn cùng một khoảnh khắc, nhưng được xem như một thời gian đồng hồ treo tường khác nhau .
ZoneId z = ZoneId.of( "Asia/Tehran" ) ;
ZonedDateTime zdt = instant.atZone( z ); // Same moment, same point on timeline, but seen as different wall-clock time.
2010-07-30T22: 30 + 04: 30 [Châu Á / Tehran]
Chuyển đổi từ java.time sang các lớp kế thừa
Bạn nên gắn bó với các lớp java.time mới. Nhưng bạn có thể chuyển đổi sang cũ nếu cần thiết.
java.util.Date date = java.util.Date.from( instant );
Joda-Thời gian
CẬP NHẬT: Dự án Joda-Time hiện đang ở chế độ bảo trì , với nhóm tư vấn di chuyển sang các lớp java.time .
FYI, công cụ xây dựng cho Thời gian hẹn giờ của Joda tương tự: Nhân với một nghìn để tạo ra một long
(không phải một int
!).
DateTime dateTime = new DateTime( ( 1_280_512_800L * 1000_L ), DateTimeZone.forID( "Europe/Paris" ) );
Tốt nhất để tránh các lớp java.util.Date và .CalWiki nổi tiếng rắc rối. Nhưng nếu bạn phải sử dụng Ngày, bạn có thể chuyển đổi từ Joda-Time.
java.util.Date date = dateTime.toDate();
Giới thiệu về java.time
Các java.time khung được xây dựng vào Java 8 và sau đó. 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
.
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.
Để tìm hiểu thêm, 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 .
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 bạn. 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.
Nơi để có được các lớp java.time?
- Java SE 8 , Java SE 9 và mới hơn
- Được xây dựng trong.
- Một phần của API Java tiêu chuẩn với việc triển khai đi kèm.
- Java 9 thêm một số tính năng nhỏ và sửa lỗi.
- Java SE 6 và Java SE 7
- Phần lớn chức năng java.time được chuyển ngược lại sang Java 6 & 7 trong ThreeTen-Backport .
- Android
- Các phiên bản sau của triển khai gói Android của các lớp java.time.
- Đối với Android trước đó (<26), các ThreeTenABP dự án thích nghi ThreeTen-backport (nêu trên). Xem Cách sử dụng ThreeTenABP .
Các ThreeTen-Extra dự án mở rộng 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 các bổ sung có thể 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 .