2009-03-18 5 views
24

मेरे पास पुराना कोड है जो दिनांक स्ट्रिंग को पार्स करने के लिए new Date(dateString) का उपयोग करता है। कोड संकलित करने से अवमूल्यन चेतावनी Date(java.lang.String) in java.util.Date has been deprecated उत्पन्न करती है।जावा में दिनांक (स्ट्रिंग एस) का एक गैर-बहिष्कृत सटीक समकक्ष?

javadoc मुझे DateFormat.parse() का उपयोग करने की सलाह देता है, भले ही DateFormat कक्षा में स्थिर parse विधि न हो।

अब, मैं SimpleDateFormat उपयोग करने के लिए कैसे पता है, लेकिन मुझे यकीन है कि मैं ठीक उसी व्यवहार deperecated Date निर्माता की हो रही है बनाना चाहते हैं।

उत्तर

47

यहाँ मेरा अनुमान है (मैं समुदाय विकी के रूप में तैनात हैं ताकि मतदान कर सकते हैं अगर मैं सही हूँ):

Date parsed; 
try { 
    SimpleDateFormat format = 
     new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"); 
    parsed = format.parse(dateString); 
} 
catch(ParseException pe) { 
    throw new IllegalArgumentException(pe); 
} 
+1

हाँ, यह बहुत अच्छा है कि अगर मैं बिल्कुल वही व्यवहार प्राप्त करना चाहता हूं तो मैं यह कैसे करूँगा। डेटफॉर्मेट का कारण क्या है।getInstance() बेहतर है यह वर्तमान लोकेल के लिए उचित फॉर्मेटर देता है। –

+4

कृपया, सुंदर कृपया कभी नहीं, कभी भी "नया IllegalgArgumentException()": ओ। कम से कम श्रृंखला में मूल अपवाद (नया IllegalArgumentException (pe))। – sleske

+0

मुझे "नया सिंपलडेटफॉर्मेट (" ईईई एमएमएम डीडी एचएच: एमएम: एसएस ज़ज़ यय्या ", लोकेल.एएनजीएलआईएसएच) का उपयोग करना पड़ा;" यह काम करने के लिए - बस किसी और को समस्या होने पर। – Nitek

2

डेटफॉर्मैट में स्थैतिक विधियां हैं जो डेटफॉर्मेट उदाहरण लौटाती हैं। मैं नहीं पता है जो एक (यदि हो तो) Date(String s) रूप में एक ही व्यवहार है, लेकिन ये रहा:

DateFormat.getInstance() 
DateFormat.getDateInstance() 
DateFormat.getTimeInstance() 
DateFormat.getDateTimeInstance() 
+1

इनमें से कोई भी काम करने के लिए प्रतीत नहीं होता – itsadok

2

संक्षिप्त उत्तर (आगे की जांच से पहले) है: नहीं, यह बराबर नहीं है। तारीख (स्ट्रिंग toParse) निर्माता वर्ग की तारीख की पार्स विधि (जो भी हटा दिया गया है) के बराबर है ... और इस विधि के दावों के javadoc:

ध्यान दें कि यह की व्याख्या से थोड़ा भिन्न है 100 से कम वर्ष जो कि SimpleDateFormat में उपयोग किया जाता है।

यदि यह एकमात्र परिवर्तन है, तो मुझे लगता है कि आप इस तरह से जा सकते हैं।

7

SimpleDateFormat जाने का रास्ता है। हालांकि, मैं बता सकता हूं कि आप एक SimpleDateFormat इंस्टेंस को परिभाषित करने और इसका उपयोग करके दिनांक ऑब्जेक्ट्स को परिभाषित करने के लिए मजबूर महसूस कर सकते हैं। यदि आप करते हैं, तो सावधान रहें कि SimpleDateFormat थ्रेड-सुरक्षित नहीं है और आप कुछ संभावित हार्ड-टू-डीबग मुद्दों पर खुद को उजागर कर सकते हैं!

मैं इस अवसर को Joda पर देखने का सुझाव देना चाहता हूं जो एक बेहतर विचार-विमर्श (और थ्रेड-सुरक्षित) एपीआई है। यह जेएसआर -310 का आधार बनाता है, जो कि नया प्रस्तावित जावा डेट एपीआई है।

मुझे समझ में आता है कि यह थोड़ा और काम है। हालांकि यह संभवतः सार्थक है कि आपको इस समय कोड को दोबारा प्रतिक्रिया देना है।

3

आप Date.parse (स्ट्रिंग रों) विधि है कि निकोलस उल्लेख के स्रोत पर एक नज़र डालें, तो आप देखेंगे कि यह एक दिनांक स्वरूप है कि बिल्कुल व्यवहार reproduces निर्माण करने के लिए मुश्किल या असंभव हो जाएगा।

यदि आप केवल चेतावनी को खत्म करना चाहते हैं, तो आप तिथि (स्ट्रिंग) कन्स्ट्रक्टर को कॉल करने के तरीके के बाहर @SuppressWarnings({“deprecation”}) डाल सकते हैं।

यदि आप वास्तव में भविष्य में जेआरई के साथ इस व्यवहार के लिए भविष्य तक पहुंच सुनिश्चित करना चाहते हैं, तो आप जेडीके स्रोतों से विधि को निकालने में सक्षम हो सकते हैं और इसे अपने स्रोतों में डाल सकते हैं। इसके लिए स्रोत कोड लाइसेंसों और उनके विशिष्ट प्रोजेक्ट पर उनके आवेदन पर विचार करने की आवश्यकता होगी, और शायद अनुमति नहीं दी जा सकती है।

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