2016-07-07 14 views
6

Tôi cố gắng để phân tích một vài cuộc hẹn, nhưng DateTimeParser dường như không đồng ý với tôi về những gì có giá trịJava8 DateTimeFormatter sáng/chiều

import java.time.ZonedDateTime 
import java.time.format.DateTimeFormatter 
import java.util.Locale 

ZonedDateTime.parse("Wed Jul 16, 2016 4:38pm EDT", DateTimeFormatter.ofPattern("EEE MMM dd, yyyy hh:mma z", Locale.US)) 

Khi tôi cố gắng này nó nói

java.time.format.DateTimeParseException: Text 'Wed Jul 16, 2016 4:38pm EDT' could not be parsed at index 17 

Vì vậy, một cái gì đó là sai với giờ? Khi tôi thả một trong những 'h' nó được tiếp tục (altough nó nên chỉ 0-pad giờ của tôi), nhưng sau đó nó không thích pm-thứ

ZonedDateTime.parse("Wed Jul 16, 2016 4:38pm EDT", DateTimeFormatter.ofPattern("EEE MMM dd, yyyy h:mma z", Locale.US)) 
java.time.format.DateTimeParseException: Text 'Wed Jul 16, 2016 4:38pm EDT' could not be parsed at index 21 

Tôi không biết những gì chính xác mình vấn đề là. Khi tôi thử 'hh: mmaa' ​​như một khuôn mẫu, nó nói rằng nó không giống như hai và bây giờ tôi đang bị mắc kẹt, vì các thông báo lỗi không hữu ích.

Trả lời

9

a dự kiến ​​PM hoặc AM trong trường hợp cao hơn. Để có trình định dạng phân biệt chữ hoa chữ thường, bạn cần phải tạo mã theo cách thủ công:

DateTimeFormatter fmt = new DateTimeFormatterBuilder() 
     .parseCaseInsensitive() 
     .appendPattern("EEE MMM dd, yyyy h:mma z") 
     .toFormatter(Locale.US); 

Lưu ý rằng bạn sẽ gặp lỗi mới vì ngày 16 tháng 7 không phải là thứ Tư.

+0

wow .. Bất kỳ ý tưởng nào tại sao mặc định không hỗ trợ trường hợp thấp hơn? Tôi đã chuyển đổi mã java.util.Date cũ sang java.time và SimpleDateFormat không có vấn đề gì với nó. –

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