tl; dr
Instant.now()
.toString()
2016-05-06T23: 24: 25.694Z
ZonedDateTime
.now
(
ZoneId.of( "America/Montreal" )
)
.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " )
2016-05-06 19: 24: 25.694
java.time
Trong Java 8 trở lên, chúng ta có khung java.time được tích hợp vào Java 8 trở lên. Các lớp mới này thay thế các lớp java.util.Date/.CalWiki cũ rắc rối. Các lớp mới được lấy cảm hứng từ khuôn khổ Joda-Time rất thành công , dự định là người kế thừa của nó, tương tự về khái niệm nhưng được tái kiến trúc. Được xác định bởi JSR 310 . Mở rộng bởi dự án ThreeTen-Extra . Xem hướng dẫn .
Xin lưu ý rằng java.time có khả năng phân giải nano giây (9 vị trí thập phân trong một phần giây), so với độ phân giải mili giây (3 vị trí thập phân) của cả java.util.Date & Joda-Time. Vì vậy, khi định dạng chỉ hiển thị 3 chữ số thập phân, bạn có thể ẩn dữ liệu.
Nếu bạn muốn loại bỏ bất kỳ micro giây hoặc nano giây khỏi dữ liệu của mình, hãy cắt bớt.
Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ;
Các lớp java.time sử dụng định dạng ISO 8601 theo mặc định khi phân tích cú pháp / tạo chuỗi. A Z
ở cuối là viết tắt của Zulu
, và có nghĩa là UTC .
An Instant
đại diện cho 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 . Việc ghi lại khoảnh khắc hiện tại trong Java 8 bị giới hạn ở một phần nghìn giây , với việc triển khai mới trong Java 9 thu được tới nano giây tùy thuộc vào khả năng của đồng hồ phần cứng máy tính của bạn.
Instant instant = Instant.now (); // Current date-time in UTC.
String output = instant.toString ();
2016-05-06T23: 24: 25.694Z
Thay thế T
ở giữa bằng một khoảng trắng và Z
không có gì để có đầu ra mong muốn của bạn.
String output = instant.toString ().replace ( "T" , " " ).replace( "Z" , "" ; // Replace 'T', delete 'Z'. I recommend leaving the `Z` or any other such [offset-from-UTC][7] or [time zone][7] indicator to make the meaning clear, but your choice of course.
2016-05-06 23: 24: 25.694
Vì bạn không quan tâm đến việc bao gồm phần bù hoặc múi giờ, hãy đặt ngày giờ "cục bộ" không liên quan đến bất kỳ địa phương cụ thể nào.
String output = LocalDateTime.now ( ).toString ().replace ( "T", " " );
Joda-Thời gian
Thư viện Joda-Time rất thành công là nguồn cảm hứng cho khung java.time. Nên di chuyển sang java.time khi thuận tiện.
Các tiêu chuẩn ISO 8601 định dạng bao gồm mili giây, và là mặc định cho các Joda thời gian 2,4 thư viện.
System.out.println( "Now: " + new DateTime ( DateTimeZone.UTC ) );
Khi chạy đào
Now: 2013-11-26T20:25:12.014Z
Ngoài ra, bạn có thể yêu cầu một phần nghìn giây của một giây, nếu cần:
int millisOfSecond = myDateTime.getMillisOfSecond ();