SimpleDateFormat
सिस्टम के डिफ़ॉल्ट स्थान (आप java.util.Locale
वर्ग का उपयोग कर सकते हैं कि, Locale.getDefault()
बुला) का उपयोग करता है। यह लोकेल डिवाइस/पर्यावरण विशिष्ट है, इसलिए आपके पास इसका कोई नियंत्रण नहीं है और प्रत्येक डिवाइस में अलग-अलग परिणाम हो सकते हैं।
और कुछ स्थानीय लोगों के पास AM/PM फ़ील्ड के लिए एक अलग प्रारूप हो सकता है। उदाहरण:
Date d = new Date();
System.out.println(new SimpleDateFormat("a", new Locale("es", "US")).format(d));
System.out.println(new SimpleDateFormat("a", Locale.ENGLISH).format(d));
उत्पादन होता है:
p.m.
PM
कि पर निर्भर नहीं करने के लिए, यदि आप अपने formatters में Locale.ENGLISH
उपयोग कर सकते हैं ताकि आप प्रणाली/डिवाइस के डिफ़ॉल्ट विन्यास पर निर्भर नहीं होगा:
String timeComeFromServer = "3:30 PM";
// use English Locale
SimpleDateFormat date12Format = new SimpleDateFormat("hh:mm a", Locale.ENGLISH);
SimpleDateFormat date24Format = new SimpleDateFormat("HH:mm");
System.out.println(date24Format.format(date12Format.parse(timeComeFromServer)));
उत्पादन होता है:
15:30
दूसरे फॉर्मेटर को एक विशिष्ट लोकेल की आवश्यकता नहीं है क्योंकि यह लोकेल विशिष्ट जानकारी से निपट नहीं रहा है।
जावा नई दिनांक/समय एपीआई
वर्ष वर्गों (Date
, Calendar
और SimpleDateFormat
) lots of problems और design issues है, और वे नए एपीआई द्वारा प्रतिस्थापित किया जा रहे हैं।
एक विस्तार है कि SimpleDateFormat
हमेशा Date
वस्तुओं के साथ काम करता है जो पूर्ण टाइमस्टैम्प (1970-01-01T00:00Z
के बाद मिलीसेकेंड की संख्या) है, और दोनों वर्गों implicity प्रणाली डिफ़ॉल्ट समय क्षेत्र behind the scenes है, जो आपको गुमराह करने और अप्रत्याशित और कठिन उत्पन्न कर सकते हैं का उपयोग करें परिणाम डीबग करने के लिए। लेकिन इस विशिष्ट मामले में, आपको केवल समय फ़ील्ड (घंटा और मिनट) की आवश्यकता है और टाइमस्टैम्प मानों के साथ काम करने की आवश्यकता नहीं है। नए एपीआई में प्रत्येक मामले के लिए विशिष्ट कक्षाएं होती हैं, बहुत बेहतर और कम त्रुटि प्रवण होती है।
एंड्रॉइड में आप ThreeTen Backport का उपयोग कर सकते हैं, जो जावा 8 की नई तिथि/समय कक्षाओं के लिए एक महान बैकपोर्ट है। इसे काम करने के लिए, आपको ThreeTenABP (here का उपयोग करने के तरीके के बारे में भी अधिक) की आवश्यकता होगी।
आप एक org.threeten.bp.format.DateTimeFormatter
का उपयोग करें और के लिए इनपुट पार्स कर सकते हैं एक org.threeten.bp.LocalTime
:
String timeComeFromServer = "3:30 PM";
DateTimeFormatter parser = DateTimeFormatter.ofPattern("h:mm a", Locale.ENGLISH);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
LocalTime time = LocalTime.parse(timeComeFromServer, parser);
System.out.println(time.format(formatter));
उत्पादन होता है:
15:30
इस विशेष मामले के लिए, आप भी time.toString()
का उपयोग एक ही परिणाम प्राप्त करने के लिए कर सकता है । बैकपोर्ट एपीआई के बारे में अधिक जानकारी के लिए आप javadoc देख सकते हैं।
मुझे त्रुटि मिली है यदि मैंने जे 7 सैमसंग का इस्तेमाल किया है तो पहले कोड पर काम नहीं करता है और यदि मैं काम करना चाहता हूं तो यह लाइन टाइमकॉमफ्रॉमसेवर = टाइम कॉमफ्रॉमसेवर.रेप्लेसएल ("पीएम", "अपराह्न") को प्रतिस्थापित करने के लिए जरूरी है। सभी ("एएम", "एम"); लेकिन अन्य डिवाइस बिना किसी रीप्ले के काम करते हैं – ahmad