Tôi đang cố gắng di chuyển từ Joda đến Java 8's ZonedDateTime
và tôi đang nhấn một bức tường với DateTimeFormatterBuilder
mà tôi dường như không thể làm việc xung quanh.DateTimeFormatterBuilder tập quán trong Java 8, cụ thể tùy chọn
Tôi muốn chấp nhận bất kỳ các định dạng:
2013-09-20T07:00:33
2013-09-20T07:00:33.123
2013-09-20T07:00:33.123+0000
2013-09-20T07:00:33.123Z
2013-09-20T07:00:33.123Z+0000
2013-09-20T07:00:33+0000
Đây là người xây dựng hiện tại của tôi:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
.optionalStart()
.appendPattern(".SSS")
.optionalEnd()
.optionalStart()
.appendZoneId()
.optionalEnd()
.optionalStart()
.appendPattern("Z")
.optionalEnd()
.toFormatter();
Tôi có thể sai, nhưng có vẻ như phải phù hợp với mô hình tôi muốn. .. đúng?
Nếu có ai có thể chỉ ra những gì tôi có thể đã bỏ lỡ, nó sẽ được đánh giá cao. Tôi cũng không quá chắc chắn về việc sử dụng appendOffset
, vì vậy sự rõ ràng về điều đó cũng được đánh giá cao nếu nó hóa ra là câu trả lời.
Edit:
Text '2013-09-20T07:00:33.061+0000' could not be parsed at index 23
Nhìn vào xây dựng, điều này dường như phù hợp do các giai đoạn bắt buộc?
Chỉnh sửa 2:
Sau khi nhìn thấy những lời khuyên từ câu trả lời đầu tiên, tôi đã cố gắng này:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
.optionalStart()
.appendPattern(".SSS")
.optionalEnd()
.optionalStart()
.appendZoneOrOffsetId()
.optionalEnd()
.toFormatter()
Nó tiếp tục thất bại trên chuỗi trên.
Sửa 3:
kiểm tra mới nhất dẫn đến ngoại lệ này:
java.time.format.DateTimeParseException: Text '2013-09-20T07:00:33.061+0000' could not be parsed at index 23
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1947)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1849)
at java.time.ZonedDateTime.parse(ZonedDateTime.java:597)
at java.time.ZonedDateTime.parse(ZonedDateTime.java:582)
"Có thể tôi đã sai, nhưng có vẻ như nó phải khớp với mẫu tôi muốn ... phải không?" Bạn đã cố gắng để phù hợp với họ trong một chương trình thử nghiệm? Chuyện gì đã xảy ra? – hexafraction
@hexafraction yeah chỉ cần đặt một vài chuỗi thông qua; điều này đặc biệt gây ra vấn đề: 'Văn bản '2013-09-20T07: 00: 33.061 + 0000' không thể được phân tích cú pháp tại chỉ mục 23' – whitfin