2011-06-22 17 views
79

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

क्या ऐसा करने का कोई आसान तरीका है? अभी के लिए मैं

Calendar cal = Calendar.getInstance(); 
cal.setTimeInMillis(0); 
cal.set(year, month, day, hour, minute, second); 
Date date = cal.getTime(); // get back a Date object 
+13

है कि ठीक है ... – Bohemian

+0

@ बोहेमियन कोड में कोई समस्या है: बनाए गए 'दिनांक' ऑब्जेक्ट के मिलीसेकंड को आंतरिक घड़ी होने पर सेट किया जाता है, जब कोड निष्पादित होता है (यदि आप 'cal.setTimeInMillis' कहते हैं, तो आप इसके आसपास हो सकते हैं (0) 'कैल से पहले' .set (...) '- परिणामस्वरूप मूर्खतापूर्ण कोड के प्रकार)। बस उस समस्या में भाग गया ... – kratenko

+0

@kratenko ठीक है अच्छा बिंदु। और कैलेंडर वैसे भी एक गड़बड़ है:/ – Bohemian

उत्तर

15

आप joda-time आज़मा सकते हैं।

+1

+1 के लिए काम करता है - जोडा समय मेरे दृश्य में अंतर्निहित रूप से बेहतर है जावा तिथि कार्यक्षमता। – mikera

32

उत्कृष्ट joda-time लाइब्रेरी जावा की तारीख या कैलेंडर कक्षाओं की तुलना में लगभग हमेशा बेहतर विकल्प है। यहाँ कुछ उदाहरण है:

DateTime aDate = new DateTime(year, month, day, hour, minute, second); 
DateTime anotherDate = new DateTime(anotherYear, anotherMonth, anotherDay, ...); 
if (aDate.isAfter(anotherDate)) {...} 
DateTime yearFromADate = aDate.plusYears(1); 
+0

मैंने यह सुझाव लिया और यह मेरे लिए बहुत अच्छा काम किया। मानक जावा दिनांक कक्षाओं का उपयोग करने के लिए एक असली दर्द है। मैंने जोडाटाइम का इस्तेमाल किया और मेरे काम के साथ एक मिनट से भी कम समय में उपयोग किया गया था! धन्यवाद। –

93

आप SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
Date d = sdf.parse("21/12/2012"); 

उपयोग कर सकते हैं लेकिन मैं नहीं जानता कि क्या यह तुलना में कैलेंडर का उपयोग करने के लिए अधिक सही विचार किया जाना चाहिए ...

+0

मुझे लगता है कि यह धीमा है क्योंकि इसे एक स्ट्रिंग को पार्स करना है। – benestar

+4

हां, आप शायद सही हैं, लेकिन यह तिथि बनाने के लिए सबसे अधिक "पठनीय" तरीका भी है, इसलिए यदि आप इसे लूप के अंदर नहीं कर रहे हैं ... – Maxx

+2

बस याद रखें कि SimpleDateFormat सिंक्रनाइज़ नहीं है। यदि आप इंस्टेंस का पुन: उपयोग करते हैं और दो विधियां एक ही SimpleDateFormat तक पहुंचती हैं तो आप बग का कारण बनेंगे। – borjab

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