क्या मुझे जावा तिथि और समय कक्षाओं का उपयोग करना चाहिए या जोडा टाइम जैसी 3 पार्टी लाइब्रेरी के साथ जाना चाहिए?


147

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

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


5
कुछ टिप्पणियों को स्पष्ट करने के लिए ... जबकि जोडा-टाइम जारी है, इसके उत्तराधिकारी जेएसआर 310: तिथि और समय एपीआई वास्तव में जावा.टाइम पैकेज के तहत जावा 8 का हिस्सा होना निर्धारित है । ओरेकल में एक ट्यूटोरियल का मसौदा है । JDBC 4.2 नए डेटा प्रकारों को संभालेगा
बेसिल बॉर्क

जवाबों:


197

संपादित करें: अब जब कि जावा 8 जारी किया गया है, यदि आप इसका उपयोग कर सकते हैं, तो ऐसा करें! java.timeमेरे समय में, जोडा टाइम से भी ज्यादा साफ-सुथरा है। हालांकि, यदि आप पूर्व-जावा -8 अटक रहे हैं, तो पढ़ें ...

मैक्स ने Joda का उपयोग करने के पेशेवरों और विपक्षों के लिए कहा ...

पेशेवरों:

  • ये अच्छी तरह काम करता है। मुझे दृढ़ता से संदेह है कि मानक जावा पुस्तकालयों की तुलना में जोडा में बहुत कम कीड़े हैं। जावा पुस्तकालयों में कुछ कीड़े डिजाइन के कारण ठीक करने के लिए वास्तव में कठिन हैं (यदि असंभव नहीं है)।
  • यह आपको सही तरीके से तारीख / समय से निपटने के बारे में सोचने के लिए प्रोत्साहित करने के लिए डिज़ाइन किया गया है - एक "स्थानीय समय" की अवधारणा को अलग करना (उदाहरण के लिए "मुझे सुबह 7 बजे जगाओ जहाँ मैं हूँ") और समय में एक पल ("मैं जेम्स को बुला रहा हूं") अपराह्न 3 बजे पीएसटी; यह 3pm नहीं हो सकता है जहां वह है, लेकिन यह एक ही पल है ")
  • मेरा मानना है कि यह यह आसान समय क्षेत्र डेटाबेस है, जो अद्यतन करने के लिए बनाता है करता है परिवर्तन तुलनात्मक रूप से निरंतर
  • इसकी एक अच्छी अपरिवर्तनीयता कहानी है, जो जीवन को बहुत आसान IME बनाती है।
  • अपरिवर्तनीयता से आगे बढ़ते हुए, सभी फ़ॉर्मेट थ्रेड-सुरक्षित होते हैं, जो बहुत अच्छा है क्योंकि आप लगभग हमेशा एक ही फॉर्मेटर को एप्लिकेशन के माध्यम से पुन: उपयोग करना चाहते हैं
  • आपके पास java.timeजावा 8 में सीखने पर एक हेड-स्टार्ट होगा , क्योंकि वे कम से कम कुछ समान हैं

विपक्ष:

  • यह सीखने के लिए एक और एपीआई है (हालाँकि डॉक्स बहुत अच्छे हैं)
  • इसके खिलाफ निर्माण और तैनाती के लिए एक और पुस्तकालय है
  • जब आप जावा 8 का उपयोग करते हैं, तब भी आपके कौशल को स्थानांतरित करने के लिए कुछ काम होता है
  • मैं DateTimeZoneBuilderअतीत में प्रभावी ढंग से उपयोग करने में विफल रहा हूं । हालांकि यह एक बहुत ही दुर्लभ उपयोग मामला है।

प्रभावी रूप से अपने छोटे एपीआई के निर्माण के oxbow_lakes 'के विचार का जवाब देने के लिए, यहां मेरे विचार हैं कि यह एक बुरा विचार क्यों है:

  • यही काम है। जब यह आपके लिए पहले से ही हो चुका है तो काम क्यों करें?
  • आपकी टीम का एक नवागंतुक आपके होमग्रोन एपीआई की तुलना में जोडा से परिचित होने की अधिक संभावना है
  • आपको सरलतम उपयोगों से परे किसी भी चीज के लिए गलत होने की संभावना है ... और यहां तक ​​कि अगर आपको शुरू में लगता है कि आपको केवल सरल कार्यक्षमता की आवश्यकता है, तो इन चीजों को एक समय में अधिक जटिल, एक छोटे से बढ़ने की आदत है। तारीख और समय में हेरफेर ठीक से करना मुश्किल है। इसके अलावा, बिल्ट-इन जावा एपीआई का ठीक से उपयोग करना मुश्किल है - बस कैलेंडर एपीआई की तारीख / समय अंकगणितीय कैसे काम करता है इसके लिए नियमों को देखें। इन सबसे ऊपर कुछ भी बनाना एक अच्छी तरह से तैयार की गई लाइब्रेरी का उपयोग करने के बजाय एक बुरा विचार है।

5
@adi: अपडेट किया गया - यह अभी भी मान्य है, लेकिन उम्मीद है कि JSR-310 जावा 8 का हिस्सा होगा, लेकिन यह जावा 7. का हिस्सा नहीं था
जॉन स्कीट

2
@JonSkeet यह शायद java-8 की शुरुआत के बाद से अपडेट किया जाना चाहिए
Sionnach733

@ Sionnach733: मैं यह सब अपडेट नहीं करने जा रहा हूं, लेकिन मैं शुरुआत में कुछ जोड़ूंगा।
जॉन स्कीट

2
java.time.*जावा 6 और 7 के लिए एक बैकपोर्ट है : threeten.org/threetenbp
Miscreant

24

खैर, जब तक आप जावा 8 की प्रतीक्षा करने का इरादा नहीं रखते हैं, उम्मीद है कि वे तारीख और समय में हेरफेर करने के लिए एक बेहतर एपीआई लागू करेंगे , हां, कृपया, जोडा-टाइम का उपयोग करें । यह समय की बचत है और कई सिरदर्द से बचता है।


फायदा और नुकसान? मैंने कभी भी जोडा समय का उपयोग नहीं किया है - यह सुनना दिलचस्प होगा कि लोग इसके बारे में क्या पसंद करते हैं।
मैक्स स्टीवर्ट

15

जवाब है: यह निर्भर करता है

Joda ((JSR-310) एक पूरी तरह कार्यात्मक तिथि / समय पुस्तकालय है, जिसमें कई कैलेंडर सिस्टम के साथ उपयोग के लिए समर्थन शामिल है।

व्यक्तिगत रूप से मैंने पाया कि जोडा को मेरी ज़रूरत के लिए जटिलता के मामले में एक कदम बहुत दूर है। मानक जावा Dateऔर Calendarकक्षाओं में 2 प्रमुख (IMHO) गलतियाँ हैं:

  1. वे परस्पर हैं
  2. वे इंस्टेंट-इन-टाइम से वर्ष-माह-दिवस की अवधारणा को मिलाते हैं

यद्यपि ये Joda द्वारा संबोधित किए जाते हैं, आपको अपनी कक्षाओं को रोल करने में काफी आसान लगेगा YearMonthDayऔर Instant, जो दोनों वास्तविक "कैलेंड्रिकल" गणना के लिए हुड के नीचे जावा कक्षाओं का उपयोग करते हैं। फिर आपको अपने आप को> 100 वर्गों, एक अलग प्रारूपण / पार्सिंग तंत्र आदि के एपीआई के साथ परिचित नहीं होना है।

बेशक, अगर आपको विभिन्न कालानुक्रमों (जैसे हिब्रू) के पूर्ण प्रतिनिधित्व की आवश्यकता है या अपनी खुद की काल्पनिक कैलेंडर प्रणाली (जैसे कि आप लिख रहे हैं एक खेल के लिए) को परिभाषित करने में सक्षम होना चाहते हैं तो शायद Joda या JRS-310 आपके लिए है। यदि नहीं, तो मैं सुझाव दूंगा कि अपना खुद का रोल करना संभवतः जाने का रास्ता है।

JSR-310 का मुख्य नेतृत्व स्टीफन कोलबोर्न है जिसने जोडा को 1 स्थान पर लिखा था, इसलिए वह तार्किक रूप से जोडा की जगह लेगा


16
गैर-विशेषज्ञों, आईएमओ द्वारा पुनर्निवेश नहीं किया जाना चाहिए ।
जॉन स्कीट

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

6
जब यह तारीख / समय एपीआई की बात आती है तो मैं सप्ताह के किसी भी दिन एक विशेषज्ञ पर भरोसा करता हूं। ऐसा नहीं है कि यह कुछ रैंडम 3 पार्टी एपीआई है जिसका कोई और उपयोग नहीं कर रहा है। "> 100 कक्षाएं" तर्क एक पुआल आदमी है, क्योंकि आपको स्पष्ट रूप से उन सभी को सीखने की आवश्यकता नहीं है।
जॉन स्कीट

5
मुझे लगता है कि हमें अलग से सहमत होना पड़ेगा। किसी भी भरोसेमंद तारीख / समय को विशेषज्ञों द्वारा लिखा गया है और अच्छी तरह से डिज़ाइन किया गया है, जो मुझे समय के साथ गंदे काम करने से बचाते हैं, मेरे दृष्टिकोण से "होना चाहिए" के रूप में गिना जाता है। पिछले वर्ष में मैंने एक जुनून के साथ मानव समय माप से नफरत करना सीखा है।
जॉन स्कीट

5
अपने खुद के रोलिंग जब जोदा मौजूद है तो बस एक भयानक विचार है। बस यह मत करो। यह सच है कि Joda में दर्जनों कक्षाएं हैं जिनका आप उपयोग नहीं करने जा रहे हैं, लेकिन इसका उत्तर काफी सरल है - उन लोगों का उपयोग न करें जिनकी आपको आवश्यकता नहीं है। ऐसी कई चीजें हैं जो इस प्रकार के अपने स्वयं के पुस्तकालय को लिखने में गलत हो सकती हैं - आप जिस प्रयास को करने जा रहे हैं वह बहुत बड़ा है, दोनों विकास और परीक्षण में। या, आप सिर्फ एक पुस्तकालय जोड़ सकते हैं। फिर, जोडा का अतिरिक्त लाभ यह है कि आपकी टीम में नई भर्ती करने वाले पहले इसका इस्तेमाल कर सकते हैं, लेकिन उन्होंने आपके होमग्रोन पुस्तकालय का उपयोग नहीं किया होगा।
दाऊद इब्न करीम

7

यह सब इस बात पर निर्भर करता है कि आप तिथियों के साथ क्या कर रहे हैं। यदि आप बस उन्हें जारी रख रहे हैं, तो वे जावा द्वारा निर्मित डेट्स में संभवत: वह सब करेंगे जो आप उन्हें चाहते हैं। हालाँकि यदि आप व्यापक समय की तारीख में हेरफेर कर रहे हैं, तो आप शायद जोडा से बेहतर हैं।


7

आपको जोडा-टाइम लाइब्रेरी का उपयोग करना चाहिए, क्योंकि:

  1. जोडा-टाइम आईएसओ 8601 मानक का समर्थन करता है , जो कि
    तारीख प्रतिनिधित्व का एक मानक तरीका है ।
  2. Java.util.date की तुलना में Joda-Time में एक दिन / महीना / वर्ष जोड़ना और घटाना अधिक आसान है।
  3. Joda-Time में एक तारीख के आधार पर इनिशियलाइज़ेशन करना बहुत आसान है।
  4. जोडा-टाइम टाइमजोन का भी समर्थन करता है।
  5. Joda-Time में एक बेहतर अंतर्निहित पार्सिंग है। "2014-02-31" जैसी गलत तारीख को त्रुटि के रूप में फेंक दिया गया है:Exception in thread "main" org.joda.time.IllegalFieldValueException: Cannot parse "2014-02-31": Value 31 for dayOfMonth must be in the range [1,28].

अधिक जानकारी के लिए आप इस पेज को लाइक कर सकते हैं: http://swcodes.blogspot.com/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.