2012-02-24 10 views
5

मेरे पास कक्षा दिनांक के उदाहरण के toString विधि को कॉल करके प्राप्त एक स्ट्रिंग है।
मैं इस स्ट्रिंग से डेट ऑब्जेक्ट कैसे प्राप्त कर सकता हूं?डेट.toString को वापस तिथि में कैसे परिवर्तित करें?

Date d = new Date(); 
String s = d.toString; 
Date theSameDate = ... 

अद्यतन
मैं SimpleDateFormat उपयोग करने के लिए कोशिश की है, लेकिन मैं java.text.ParseException: Unparseable date तुम मुझे तारीख Date.toString द्वारा उत्पादित प्रारूप बता सकते हैं मिलता है()?

+0

'SimpleDateFormat' कहकर पार्सिंग आज़माएं। – bdares

+1

स्ट्रिंग का उपयोग न करें। दिनांक वस्तु रखें और आवश्यकता होने पर केवल स्ट्रिंग में परिवर्तित करें। – m0skit0

+1

क्या आप वास्तव में प्राप्त करने की कोशिश कर रहे हैं पर कुछ संदर्भ प्रदान करना एक अच्छा विचार हो सकता है। – flesk

उत्तर

12

अपने वास्तविक लक्ष्य कस्टम मेड हठ या आंकड़ा अंतरण किसी तरह के लिए एक Date वस्तु क्रमानुसार करने है, तो एक सरल उपाय होगा:

Date d = new Date(); 
long l = d.getTime(); 
Date theSameDate = new Date(l); 
+1

एफवाईआई: परेशानी 'तिथि' कक्षा अब विरासत है, जिसे' तत्काल 'और अन्य * जावा.टाइम * कक्षाओं द्वारा प्रतिस्थापित किया गया है। ओले वी.वी. द्वारा [इस उत्तर] में आधुनिक दृष्टिकोण देखें (https://en.m.wikipedia.org/wiki/ISO_8601) –

2

SimpleDateFormat#parse() पर एक नज़र डालें। यह उस कार्यक्षमता को प्रदान करना चाहिए जिसे आप ढूंढ रहे हैं।

+0

वह कक्षा अब 'डेटटाइमफॉर्मेटर' द्वारा बाहर हो गई है। –

-1

Date theSameDate = new Date(Date.parse(s));

कुछ इतना स्पष्ट नहीं कारणों से, यह एक विशेष रूप से अच्छा विचार नहीं है। आप पार्स विधि के लिए एपीआई दस्तावेज़ीकरण में उस पर विवरण पा सकते हैं। एक समस्या उदा। कि समय क्षेत्र संक्षेप अस्पष्ट हैं, ताकि पार्सर सही समय क्षेत्र की व्याख्या करने में विफल हो सके।

+0

इसके अलावा 'Date.parse() 'को बहुत समय पहले बहिष्कृत कर दिया गया था। –

8

आप इस

Date d = new Date(); 
String s = d.toString; 
Date theSameDate = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy").parse(s); 
+0

यह विधि ORG.json लाइब्रेरी के साथ भी काम करती है जब जावा तिथि ऑब्जेक्ट्स को JSONObjects से और बीन कन्स्ट्रक्टर का उपयोग करके कनवर्ट करते हैं, क्योंकि यह JSONObjects का निर्माण करते समय Date.toString() का उपयोग करता है। इसके लिए धन्यवाद, यह बिल्कुल SimpleDateFormat के लिए प्रारूप है जिसे मैं ढूंढ रहा था। –

+0

एफवाईआई, यहां उपयोग की जाने वाली परेशानी पुरानी कक्षाएं * java.time * कक्षाओं द्वारा आपूर्ति की गई विरासत अब विरासत हैं। –

2
है जैसे कि यह कर सकता है
  1. यदि आपका वास्तविक लक्ष्य दिनांक और समय (डेटा स्थानांतरण या दृढ़ता के लिए, उदाहरण के लिए) को क्रमबद्ध और deserialize करना है, तो आईएसओ 8601 को क्रमबद्ध करें, दिनांक और समय डेटा के लिए मानक प्रारूप।
  2. लंबे समय से 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 नाम दिया)।

+1

टीएल; डॉ 'Instant.parse (Instant.now()। ToString())' –

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