2015-04-29 17 views
9

Tôi đang cố gắng để ngày ở định dạng ISO8601 phân tích:Java 8 Date and Time API - phân tích yyyy-MM-dd'T'HH: mm: ss.SSSZ

yyyy-MM-dd'T' HH: mm: ss.SSSZ

tôi thích hợp mà nó không thể phân tích nó với bất cứ định dạng mặc định theo quy định tại java.time.format.DateTimeFormatter?

Ví dụ ISO_OFFSET_DATE_TIME sẽ chỉ phân tích:

yyyy-MM-dd'T'HH: mm: ss.SSSZZ

Samples:

yyyy-MM-dd'T'HH:mm:ss.SSSZ 
2015-04-29T10:15:00.500+0000 

yyyy-MM-dd'T'HH:mm:ss.SSSZZ 
2015-04-29T10:15:00.500+00:00 

BTW: Tôi biết tôi có thể định nghĩa trình định dạng của riêng tôi mà không phải là vấn đề. Chỉ muốn đảm bảo rằng tôi không thiếu một cái gì đó như ISODateTimeFormat của Joda có khả năng phân tích cả hai:

org.joda.time.format.DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTime(); 
DateTime dateTime = dateTimeFormatter.parseDateTime("2015-04-29T10:15:00.500+0000"); 
+0

Bạn có thể đặt DateFormatter của riêng bạn –

+0

Các tài liệu không rõ ràng về sự khác biệt giữa Z và ZZ - bạn có thể đưa ra một số văn bản mẫu mà bạn đang cố gắng để phân tích điều đó không không phân tích cú pháp với ISO_OFFSET_DATE_TIME? (Dường như nó giống ZZZZZ hơn ZZ, vì nó bao gồm dấu hai chấm.) –

+2

Biến ra định nghĩa một trình định dạng java.time có thể phân tích cả hai đều không đơn giản. – bowmore

Trả lời

4

Bạn đang đúng ở chỗ này không xuất hiện để phù hợp với bất cứ định dạng mặc định, vì vậy bạn sẽ cần phải xây dựng định dạng của mình với java.time.format.DateTimeFormatterBuilder.

+0

Khi tôi buồn, tôi biết tôi có thể định nghĩa định dạng của riêng mình có thể phân tích cú pháp yyyy-MM-dd'T'HH: mm: ss.SSSZ không phải là vấn đề ở đây. Tôi muốn có một định dạng có khả năng phân tích cả hai "Z" và "ZZ", lý tưởng nhất là một trong những được cung cấp trong java.time.format. * Một nơi nào đó – vehovmar

1

Joda sử dụng định dạng ISO8601 cho ISODateTimeFormat mặc định. Vì vậy, dựa trên tài liệu http://www.w3.org/TR/NOTE-datetime, Joda sẽ không thể phân tích cú pháp định dạng của bạn.

+1

Bạn có thể thử cho mình Joda có thể phân tích nó. – vehovmar

+0

Xem câu trả lời của tôi, tất nhiên là Joda/java.util.time có thể tạo một DateTimeFormatter có khả năng phân tích cú pháp định dạng đã cho. – llogiq

+0

cảm ơn bạn đã cho tôi biết rằng –

3

Tôi không chắc đây là câu trả lời mong đợi của bạn.

Phương pháp 1

Parse sử dụng tức thì

Instant.parse("2015-06-28T10:13:14.743Z"); 

Phương pháp 2

Định dạng đầu vào nhất định là tương đương với định dạng ISO_DATE_TIME sau khi loại bỏ 'Z' từ mô hình yyyy cho -MM-dd'T'HH: mm: ss.SSSZ

Sau đó, chúng ta có thể phân tích nó bằng ISO_DATE_TIME

text = "2015-06-28T10:13:14.743" 
LocalDateTime.parse(text,DateTimeFormatter.ISO_DATE_TIME) 
Các vấn đề liên quan