2010-03-04 14 views
12

मई मुझे पता है कि किसी विशिष्ट दिन, महीने और वर्ष का उपयोग करके डेट ऑब्जेक्ट बनाने का सबसे प्रभावी तरीका क्या है।निर्माण तिथि - एक कुशल तरीका

Date(int year, int month, int day) 

यह निर्माण अवमूल्यन है। इसलिए, मैं आमतौर पर क्या करता हूं:

Calendar calendar = Calendar.getInstance(); 
Date date = calendar.set(year, month, date).getTime(); 

हालांकि, मेरी समझ यह है कि कैलेंडर.getInstance() बल्कि महंगा है। डेट ऑब्जेक्ट बनाने का सबसे प्रभावी तरीका क्या है? या क्या मुझे बाकी बताए बिना चुपचाप तारीख (int वर्ष, int month, int day) का उपयोग करना चाहिए?

कृपया किसी तीसरे पक्ष की लाइब्रेरी का उपयोग करने का सुझाव न दें।

+1

किसी तृतीय पक्ष लाइब्रेरी का उपयोग न करने के लिए कोई विशेष कारण? जोडा टाइम अंतर्निहित लोगों की तुलना में एक * अधिक * बेहतर एपीआई है। जब तक आपके पास वास्तव में इसका उपयोग न करने का वास्तव में अच्छा कारण है, तो मैं दृढ़ता से अनुशंसा करता हूं कि आप इसके लिए कूदें। –

+1

यूप। मुझे पता है कि 10 में से 9 मुझे जॉडा टाइम का उपयोग करने का सुझाव देंगे। यही कारण है कि मैंने कोई तीसरी पार्टी लाइब्रेरी पर कोई टिप्पणी नहीं की है :) –

+0

मुझे लगता है कि अगर आप कोई पुस्तकालय नहीं चाहते हैं, तो आप बहुत ज्यादा अटक गए हैं। आम तौर पर, 5 में से 4 डेवलपर्स जोडा टाइम को किसी भी तारीख से संबंधित करने की सलाह देंगे। – sfussenegger

उत्तर

15

इसके साथ आप अनावश्यक "अब समय" उदाहरण निर्माण से बच सकते हैं।

Date coolDate = new GregorianCalendar(year, month, day).getTime(); 

आप अन्य रचनाकारों के लिए ग्रेगोरियन कैलेंडर जेवाडोक देख सकते हैं। आपके पास तिथि + समय, और टाइमज़ोन है।

वैसे भी मैं जॉन स्कीट से सहमत हूं कि यह इतना महंगा नहीं है। मैं आपसे सहमत हूं कि कोड को डिफ़ॉल्ट "अब" प्रारंभिकता की आवश्यकता नहीं है।

+0

+1, लेकिन एक विशिष्ट कैलेंडर का उपयोग करने से सावधान रहें। – medopal

+0

हाँ। मैं समझता हूं कि दिन, महीना, वर्ष का उपयोग कैलेंडर का उपयोग करने के बारे में एक ज्ञान का तात्पर्य है (लेकिन यदि यह डीएमवाई का सामान्य प्रबंधन है ... कैलेंडर बनाने के लिए कोई विधि नहीं है ... :) – helios

+1

'calendar.getInstance का उपयोग करने का बिंदु () 'लोकेल-विशिष्ट मतभेदों की अनुमति देना है। 'ग्रेगोरियन कैलेंडरर' बनाना सीधे उस फेंकने के लाभ को बचाता है ... कोड की एक पंक्ति। सृजन को एक स्थिर फैक्ट्री विधि में रखना बेहतर होगा। – cletus

6

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

इसके अलावा, आपने निर्दिष्ट नहीं किया है कि आप किस समय क्षेत्र को Date में मानना ​​चाहते हैं। यु.टी. सी? डिफ़ॉल्ट समय क्षेत्र? आप किस दिन का समय चाहते हैं - मध्यरात्रि, या दिन का वर्तमान समय? आपका वर्तमान कोड दिन के मौजूदा समय को बनाए रखेगा - क्या वास्तव में आप क्या चाहते हैं?

(जैसा कि मैंने एक टिप्पणी में उल्लेख किया है, मैं दृढ़ता से सुझाव देता हूं कि आप जोडा समय पर जाएं - लेकिन यदि आप नहीं करते हैं, तो भी आपको यह जांचना चाहिए कि आपको वास्तव में देखने से पहले अपने मौजूदा कोड में कोई समस्या है या नहीं समाधान के लिए।)

+2

जोडा समय शायद अधिक है। कैलेंडरों के संबंध में "महंगा" कुछ ऐसा है जो जेडीके 1.4 दिनों में सच था। मैं उसी गलतफहमी के तहत था क्योंकि ओपी टिल मैंने इसका परीक्षण किया था और इनकी सैकड़ों हजारों को आसानी से दूसरी समस्या नहीं पहुंचा सकता था। – cletus

+2

@cletus: जोडा समय की सिफारिश करने का मेरा अधिकांश कारण यह गति नहीं है - यह एक बेहतर एपीआई का उपयोग करना है। मुझे लगता है कि अगर वह एक तारीख बना रहा है, तो वह इसका भी उपयोग करेगा। जोडा समय तिथियों और समय, अवधि को संभालने का एक बेहतर तरीका है। –

+1

किसी को आश्चर्य करना होगा कि जोडा समय जावा में बन गया है जो jQuery जावास्क्रिप्ट में बन गया है: कुछ हमेशा सुझाव दिया जाता है। :) सीधे बनाने के लिए – cletus

1

तुम जो भी उपयोग करते हैं, जब तक कि यह जावा मानक एपीआई में है, यह Calendar के उपयोग (दोनों Date निर्माता और SimpleDateFormat वह आंतरिक रूप से उपयोग करें) शामिल होगी, ताकि वर्ग की तथाकथित अक्षमता के बारे में fretting कोई मतलब नहीं है।

1

मैं बस यह करना होगा:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
Date thisDate = formatter.parse("2010-03-04"); 

यह कोड दृष्टिकोण का एक लाइनों से बहुत कुशल है, मैं कैलेंडर के साथ अपनी रनटाइम दक्षता से बात नहीं कर सकता।

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