2012-01-07 18 views
7

मैं जावा में तारीख परिवर्तित करने में एक समस्या है, पता नहीं है जहां मैं गलत जा रहा हूँ ...जावा तिथि प्रारूप रूपांतरण - हो रही गलत महीने

String dateStr = "2011-12-15"; 
    String fromFormat = "yyyy-mm-dd"; 
    String toFormat = "dd MMMM yyyy"; 

    try { 
     DateFormat fromFormatter = new SimpleDateFormat(fromFormat); 
     Date date = (Date) fromFormatter.parse(dateStr); 

     DateFormat toformatter = new SimpleDateFormat(toFormat); 
     String result = toformatter.format(date); 

    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

इनपुट तारीख 2011-12-15 और मैं परिणाम "15 दिसंबर 2011" के रूप में उम्मीद कर रहा हूं, लेकिन मुझे इसे "15 जनवरी 2011"

कहां से गलत हो रहा है?

उत्तर

21

आपका fromFormat मिनटों का उपयोग करता है जहां इसे महीनों का उपयोग करना चाहिए।

String fromFormat = "yyyy-MM-dd"; 
+0

मैं sooooo गूंगा हूँ :(धन्यवाद .... – amithgc

+0

नहीं probs वहां रहे हैं :) – sje397

+0

है, आप कर रहे हैं, आपका,: पी – fge

2

देखो और देखें कि m क्या दर्शाता है। महीनों के रूप में आप सोचते हैं लेकिन मिनट नहीं।

1

mSimpleDateFormat में मिनटों के लिए खड़ा है, जबकि M महीने के लिए खड़ा है। इस प्रकार आपका पहला प्रारूप yyyy-MM-dd होना चाहिए।

+0

एक चीज़ जो मुझे पसंद है वह है कि प्रश्नों का उत्तर बहुत जल्दी दिया गया है। 1 मिनट के दौरान 3 नए जवाब जब मैंने एक जवाब टाइप किया, भयानक! – ffriend

1

प्रारूप से किया जाना चाहिए:

String fromFormat = "yyyy-MM-dd" 
1

java.time

जबकि स्वीकार किए जाते हैं जवाब सही है (महीने के लिए अपरकेस MM), वहाँ अब एक बेहतर तरीका है। परेशान पुराने डेट-टाइम कक्षाएं अब विरासत हैं, जो जावा.टाइम कक्षाओं द्वारा आपूर्ति की जाती हैं।

आपकी इनपुट स्ट्रिंग मानक ISO 8601 प्रारूप में है। इसलिए पार्सिंग के लिए स्वरूपण पैटर्न निर्दिष्ट करने की आवश्यकता नहीं है।

LocalDate ld = LocalDate.parse("2011-12-15"); // Parses standard ISO 8601 format by default. 
Locale l = new Locale("en" , "IN") ; // English in India. 
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG) 
             .withLocale(l); 
String output = ld.format(f); 

कंसोल पर डंप करें।

System.out.println("ld.toString(): " + ld); 
System.out.println("output: " + output); 

ld.toString(): 2011-12-15

उत्पादन: दिसम्बर 15 2011

देखें live code in IdeOne.com


java.time

बारे java.time ढांचे जावा 8 और बाद में बनाया गया है।ये कक्षाएं परेशान पुराने legacyjava.util.Date, Calendar, & SimpleDateFormat जैसी समय-समय पर कक्षाएं प्रदान करती हैं।

Joda-Time प्रोजेक्ट, अब maintenance mode में, java.time कक्षाओं में माइग्रेशन की सलाह देता है।

और जानने के लिए, Oracle Tutorial देखें। और कई उदाहरणों और स्पष्टीकरणों के लिए स्टैक ओवरफ़्लो खोजें। विशिष्टता JSR 310 है।

जावा.टाइम कक्षाएं कहां प्राप्त करें?

  • Java SE 8 और SE 9 और बाद में
    • में निर्मित।
    • एक बंडल कार्यान्वयन के साथ मानक जावा एपीआई का हिस्सा।
    • जावा 9 कुछ मामूली विशेषताओं और सुधारों को जोड़ता है।
  • Java SE 6 और SE 7
    • java.time कार्यक्षमता की ज्यादातर ThreeTen-Backport में जावा 6 & से 7 वापस भेजा गया है।
  • Android
    • ThreeTenABP परियोजना adapts ThreeTen-backport विशेष रूप से (जैसा कि ऊपर उल्लेख) Android के लिए।
    • How to use ThreeTenABP… देखें।

ThreeTen-Extra परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के संभावित भविष्य के जोड़ों के लिए एक सिद्ध भूमि है। आपको यहां कुछ उपयोगी कक्षाएं मिल सकती हैं जैसे Interval, YearWeek, YearQuarter, और more

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