है जैसे कि यह कर सकता है
- यदि आपका वास्तविक लक्ष्य दिनांक और समय (डेटा स्थानांतरण या दृढ़ता के लिए, उदाहरण के लिए) को क्रमबद्ध और deserialize करना है, तो आईएसओ 8601 को क्रमबद्ध करें, दिनांक और समय डेटा के लिए मानक प्रारूप।
- लंबे समय से
Date
कक्षा को छोड़ दें। java.time
के रूप में जाना जाने वाला आधुनिक जावा दिनांक और समय API के साथ काम करने के लिए बहुत अच्छा है। जिस वर्ग की आपको आवश्यकता है वह शायद Instant
है (यह आपकी अधिक सटीक आवश्यकताओं पर निर्भर करता है)।
दो अंक हाथ में अच्छी तरह से हाथ जाना:
Instant i = Instant.now();
String s = i.toString();
Instant theSameInstant = Instant.parse(s);
आधुनिक कक्षाओं 'toString
तरीकों आईएसओ 8601 प्रारूप (जैसे, 2018-01-11T10:59:45.036Z
) का उत्पादन, और उनके parse
तरीकों एक ही प्रारूप वापस पढ़ें। तो यह स्निपेट आपको चाहिए, और आपको नैनोसेकंद परिशुद्धता के साथ पहले के बराबर तत्काल मिलता है।
आप स्ट्रिंग आपको मिल नियंत्रित नहीं कर सकते हैं, और आप परिणाम Date.toString()
से, प्रारूप पैटर्न स्ट्रिंग Sedalb’s answer कार्यों में java.time
साथ भी मिलता है:
DateTimeFormatter dtf
= DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ROOT);
Date d = new Date();
String s = d.toString();
Instant nearlyTheSameInstant = ZonedDateTime.parse(s, dtf).toInstant();
यह एक स्थान प्रदान करने के लिए आवश्यक है। अन्यथा JVM के डिफ़ॉल्ट लोकेल का उपयोग किया जाएगा, और यदि यह अंग्रेजी नहीं है, तो पार्सिंग विफल हो जाएगी। सबसे बुरे मामले में आप अपने कोड को कई सालों तक ठीक से देख पाएंगे और अचानक यह टूट जाएगा जब एक दिन कोई कंप्यूटर या डिवाइस पर एक अलग लोकेल सेटिंग के साथ चलता है।
jambjo’s answer से बात अभी भी लागू होता है: तीन और चार पत्र समय क्षेत्र Date.toString()
में इस्तेमाल किया संक्षिप्त रूपों बहुत अक्सर अस्पष्ट हैं, तो कोई गारंटी नहीं कि समय क्षेत्र सही व्याख्या की है वहाँ है, और फिर, इसे दूसरे तरीके से व्याख्या की जाएगी विभिन्न जेवीएम पर।
अंत में, Date.toString()
मिलीसेकंड प्रस्तुत नहीं करता है जो Date
रखता है, जो 999 मिलीसेकंड तक की गलतता का कारण बनता है। यदि Date.toString()
से स्ट्रिंग का उपयोग करते हैं, तो इसके बारे में हम कुछ भी नहीं कर सकते हैं (यही कारण है कि मैंने परिवर्तनीय nearlyTheSameInstant
नाम दिया)।
स्रोत
2018-01-11 10:57:00
'SimpleDateFormat' कहकर पार्सिंग आज़माएं। – bdares
स्ट्रिंग का उपयोग न करें। दिनांक वस्तु रखें और आवश्यकता होने पर केवल स्ट्रिंग में परिवर्तित करें। – m0skit0
क्या आप वास्तव में प्राप्त करने की कोशिश कर रहे हैं पर कुछ संदर्भ प्रदान करना एक अच्छा विचार हो सकता है। – flesk