2015-10-08 11 views
8

Theo mặc định, phương pháp toString của Instant sử dụng trình định dạng DateTimeFormatter.ISO_INSTANT. formatter rằng sẽ không in các chữ số cho phần-of-thứ hai nếu chúng xảy ra là 0.java.time Định dạng ngày ISO với các chữ số millis cố định (trong Java 8 trở lên)

java-time ví dụ:

2015-10-08T17:13:07.589Z 
    2015-10-08T17:13:07Z 

Joda-Time ví dụ (và những gì tôi mong đợi từ java.time):

2015-10-08T17:13:07.589Z 
    2015-10-08T17:13:07.000Z 

Điều này thực sự bực bội khi phân tích cú pháp trong một số hệ thống. Elasticsearch là vấn đề đầu tiên tôi gặp phải, không có định dạng được xác định trước hỗ trợ tùy chọn millis, nhưng tôi có thể có thể làm việc xung quanh đó với một định dạng tùy chỉnh. Mặc định có vẻ như sai.

Dường như bạn không thể tạo chuỗi định dạng của riêng mình cho Instants. Là tùy chọn duy nhất thực hiện java.time.format.DateTimeFormatterBuilder.InstantPrinterParser của riêng tôi?

+0

Mục tiêu của bạn là chỉ tìm xem ngày có độ chính xác đến mili giây không? –

+0

Mục tiêu là định dạng ngày tháng đó với phần thứ hai phân số ngay cả khi các mili giây bằng 0. Nói cách khác, bắt chước những gì Joda làm. –

+1

Nhắc nhở nhanh: java.time cung cấp độ phân giải [nano giây] (https://en.wikipedia.org/wiki/Nanosecond), trái ngược với độ phân giải mili giây của Joda-Time & java.util.Date. Điều đó có nghĩa là lên đến chín (9) chữ số của một phân số thứ hai. Vì vậy, nếu bạn giới hạn đến 3, bạn có thể ẩn/mất dữ liệu. Xem [sơ đồ này của tôi] (http://i.stack.imgur.com/OW0RW.png). –

Trả lời

7

Chỉ cần tạo DateTimeFormatter giữ ba chữ số thập phân.

DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendInstant(3).toFormatter(); 

Sau đó, sử dụng. Ví dụ:

System.out.println(formatter.format(Instant.now())); 
System.out.println(formatter.format(Instant.now().truncatedTo(ChronoUnit.SECONDS))); 

... in (vào thời điểm đó tôi chạy nó):

2015-10-08T21:26:16.571Z 
2015-10-08T21:26:16.000Z 

Trích của class doc:

... Tham số fractionalDigits cho phép đầu ra của thứ hai phân đoạn Được kiểm soát. Chỉ định số không sẽ không tạo ra các chữ số thập phân. Từ 1 đến 9 sẽ xuất ra một số chữ số ngày càng tăng, sử dụng không phải đệm đúng nếu cần. Giá trị đặc biệt -1 được sử dụng để xuất ra nhiều chữ số cần thiết để tránh bất kỳ số 0 dấu nào. …

Các vấn đề liên quan