2015-09-21 16 views
5

Tôi muốn chuyển đổi các phiên bản của lớp java.time.Instant sang và từ các chuỗi.Làm thế nào để tạo một biến thể tùy chỉnh của DateTimeFormatter ISO_INSTANT không sử dụng dấu hai chấm?

Tôi muốn sử dụng định dạng chính xác như java.time.format.DateTimeFormatter.ISO_INSTANT với sự khác biệt duy nhất mà dấu hai chấm ở định dạng bị bỏ qua hoặc thay thế bằng dấu chấm để chúng có thể được sử dụng mà không cần thoát trong tên tệp và URL.

Ví dụ: 2011-12-03T10.15.30.001Z thay vì 2011-12-03T10: 15: 30.001Z

Xem Javadoc cho ISO_INSTANT: https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#ISO_INSTANT

+0

Nó có lẽ không tầm thường, vì ISO_INSTANT sử dụng java.time.format.DateTimeFormatterBuilder.InstantPrinterParser và dấu hai chấm được mã hóa cứng ở đó. – Gustave

+3

Trường hợp bạn luôn luôn là 'input.replace (". ",": ");' ... Nó có thể là tốt như một định dạng ngày phức tạp. – assylias

+0

Vâng, đây là giải pháp thực dụng nhưng rất không lành mạnh mà tôi đang sử dụng bây giờ cho đến khi tôi tìm thấy một cái gì đó tốt hơn. – Gustave

Trả lời

1

Bạn có thể xây dựng định dạng riêng của bạn như thế này :

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH.mm.ss.SSSVV") 

Javadoc liệt kê tất cả các mã thông báo có thể có với chữ ký của chúng.

+0

Tôi nghĩ rằng điều này là không đủ, bởi vì ISO_INSTANT luôn sử dụng UTC và không có giây phân số nếu không cần thiết. – Gustave

+1

DateTimeFormatter.ofPattern ("yyyy-MM-dd'T'HH.mm.ss.SSSV") ném java.lang.IllegalArgumentException: Số lượng mẫu văn bản phải là 2: V – Gustave

+2

DateTimeFormatter.ofPattern ("yyyy-MM-dd ' Định dạng T'HH.mm.ss.SSSVV "). (Instant.EPOCH) tạo ra java.time.temporal.UnsupportedTemporalTypeException: Trường không được hỗ trợ: YearOfEra – Gustave

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