2016-07-07 9 views
6

मैं कुछ तारीखों पार्स करने के लिए कोशिश कर रहा हूँ, लेकिन DateTimeParser जब मैं कोशिश यह कहते हैंJava8 DateTimeFormatter AM/PM

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

तो कुछ क्या वैध

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)) 

है पर मेरे साथ सहमत नहीं लगता है घंटों के साथ गलत है? जब मैं 'h' में से एक बूंद इसे आगे हो जाता है (हालांकि यह सिर्फ 0-पैड मेरी घंटे चाहिए), लेकिन फिर यह बजे-सामान

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 

मैं क्या उसकी सटीक पता नहीं है पसंद नहीं है समस्या यह है। जब मैं 'hh: mmaa' ​​को एक पैटर्न के रूप में प्रयोग करता हूं तो यह कहता है कि इसे दो पसंद नहीं है और अब मैं अटक गया हूं, क्योंकि त्रुटि संदेश उपयोगी नहीं हैं।

उत्तर

9

a ऊपरी मामले में PM या AM अपेक्षा करता है। एक केस संवेदी फ़ॉर्मेटर प्राप्त करने के लिए आप इसे मैन्युअल का निर्माण करने की जरूरत है:

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

ध्यान दें कि आप एक नया त्रुटि प्राप्त होगी क्योंकि जुलाई के 16 वीं बुधवार नहीं है।

+0

वाह .. कोई विचार क्यों डिफ़ॉल्ट कम मामले का समर्थन नहीं करता है? मैं पुराने java.util.Date कोड java.time में परिवर्तित कर रहा था और SimpleDateFormat में कोई समस्या नहीं थी। –

संबंधित मुद्दे