2010-02-08 9 views
34

मैंजावा में डेटफॉर्मेट का उपयोग करके महीने पूर्ण फॉर्म स्ट्रिंग का विश्लेषण कैसे करें?

DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy"); 
    Date d = fmt.parse("June 27, 2007"); 

Exception in thread "main" java.text.ParseException: Unparseable date: "June 27, 2007"

जावा डॉक्स का कहना है कि मैं पूर्ण रूप से मिलान करने के चार अक्षर का उपयोग करना चाहिए की कोशिश की। मैं केवल "जून" जैसे संक्षिप्त महीनों के साथ सफलतापूर्वक एमएमएम का उपयोग करने में सक्षम हूं लेकिन मुझे पूर्ण रूप से मिलान करने की आवश्यकता है।

पाठ: स्वरूपण के लिए, यदि पैटर्न पत्रों की संख्या 4 या अधिक है, पूर्ण रूप प्रयोग किया जाता है; अन्यथा उपलब्ध होने पर संक्षिप्त या संक्षिप्त रूप का उपयोग किया जाता है। पार्सिंग के लिए, दोनों फॉर्म पैटर्न अक्षरों की संख्या से स्वतंत्र हैं।

http://java.sun.com/j2se/1.6.0/docs/api/java/text/SimpleDateFormat.html

+2

आपके दिनांक स्ट्रिंग में आपके पास दो रिक्त स्थान हैं। –

+0

क्या आप वाकई जावा 6 का उपयोग कर रहे हैं? आपके द्वारा चिपकाए गए कोड की दो पंक्तियां मेरे लिए ठीक काम कर रही हैं; कोई अपवाद नहीं। – aberrant80

उत्तर

88

आप शायद एक स्थान जहां माह के नाम "जनवरी", "फ़रवरी", आदि लेकिन अपनी स्थानीय भाषा में कुछ अन्य शब्द नहीं हैं प्रयोग कर रहे हैं।

, वातावरण आप उपयोग करना चाहते निर्दिष्ट करने उदाहरण Locale.US के लिए प्रयास करें:

DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy", Locale.US); 
Date d = fmt.parse("June 27, 2007"); 

इसके अलावा, आप दिनांक स्ट्रिंग में एक अतिरिक्त स्थान है, लेकिन वास्तव में इस परिणाम पर कोई प्रभाव नहीं है। यह किसी भी तरह से काम करता है।

+0

तो अतिरिक्त स्थान पर पार्स त्रुटि में कुछ प्रभाव पड़ता है? –

+0

@ बेउ मार्टिनेज: नहीं, इसका कोई प्रभाव नहीं पड़ता है। मैंने उस बिंदु को संबोधित करने के लिए अपनी टिप्पणी अपडेट कर दी है क्योंकि यह केवल आपके द्वारा नहीं लाया गया है, बल्कि टिप्पणियों में दूसरों द्वारा भी। –

2

बस इस नई जावा 8 एपीआई अप करने के लिए शीर्ष पर:

DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("MMMM dd, yyyy").toFormatter(); 
TemporalAccessor ta = formatter.parse("June 27, 2007"); 
Instant instant = LocalDate.from(ta).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant(); 
Date d = Date.from(instant); 
assertThat(d.getYear(), is(107)); 
assertThat(d.getMonth(), is(5)); 

एक थोड़ा और अधिक वर्बोज़ लेकिन आप यह भी देख सकते हैं कि इस्तेमाल किया पदावनत कर रहे हैं ;-) समय तिथि के तरीकों पर ले जाने के लिए।

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