दिलचस्प पोस्ट
एंड्रॉइड: लगातार स्टॉपवॉच के रूप में क्रोनोमीटर प्रारंभ समय कैसे सेट करें? क्रोनोमीटर "बेस" क्या है? JQuery का उपयोग करके एक <input type = "text"> (तुरंत) में सभी परिवर्तन खोजें जावा स्विंग कैनवास पर आइटम को माउसलिस्टनर कैसे जोड़ें मैं कैसे एक जावास्क्रिप्ट घटना क्लिक ट्रिगर कर सकते हैं .NET के लिए नि: शुल्क बारकोड एपीआई PHP में छवि क्रॉप करें जावास्क्रिप्ट में एन्क्रिप्शन और PHP के साथ डिक्रिप्शन टी-एसक्यूएल दशमलव भाग सटीकता घटनाओं के माध्यम से WPF कॉलिंग आदेश Matplotlib में एक भूखंड को साफ करने के लिए जब cla (), clf () या बंद () का उपयोग करें? कैसे सी # का उपयोग कर HTML टैग को साफ करने के लिए किस स्थितियों में हमें एआरसी के तहत __ऑटोरेलीज़िंग स्वामित्व क्वालीफायर लिखने की जरूरत है? AJAX बिना खींचें और ड्रॉप फ़ाइल अपलोड, अग्रभूमि में सिंक्रोनस? सीरियललाइजेशन और डिसेरायलाइजेशन के दौरान कंट्रोलर्स को कैसे बुलाया जाता है? पायथन डिवीजन

जावा 8 दिनांक समय एपीआई (जावा। टाइम) और जोडा-टाइम के बीच अंतर

मुझे पता है कि जावा.उटल.डेट और जोडा-टाइम से संबंधित प्रश्न हैं। लेकिन कुछ खुदाई के बाद, मैं java.time API ( जावा 8 में नया, JSR 310 द्वारा परिभाषित) और जोडा-टाइम के बीच अंतर के बारे में एक धागा नहीं मिल सका।

मैंने सुना है कि जावा 8 का जावा। टाइम एपीआई बहुत क्लीनर है और जोडा-टाइम की तुलना में अधिक कुछ भी कर सकता है। लेकिन मैं दो की तुलना में उदाहरणों को नहीं ढूँढ सकता।

  • Java.time क्या कर सकता है कि जोडा-टाइम नहीं कर सकता है?
  • Joda.time क्या joda-time से बेहतर कर सकता है?
  • क्या प्रदर्शन बेहतर है java.time?

Solutions Collecting From Web of "जावा 8 दिनांक समय एपीआई (जावा। टाइम) और जोडा-टाइम के बीच अंतर"

आम सुविधाएं

क) दोनों पुस्तकालय अपरिवर्तनीय प्रकारों का उपयोग करते हैं। जोडा-टाइम में अतिरिक्त अस्थिर प्रकार जैसे MutableDateTime प्रदान करता है

ख) इसके अलावा: दोनों पुस्तकालयों एरिक इवांस से डिज़ाइन अध्ययन "टाइम एंडमनी" या मार्टिन फोवलर से डोमेन प्रेरित शैली के बारे में विचारों से प्रेरित हैं, ताकि वे धाराप्रवाह प्रोग्रामिंग शैली के लिए अधिक या कम प्रयास करें (हालांकि हमेशा सही नहीं ;-))।

ग) दोनों पुस्तकालयों के साथ हमें एक वास्तविक कैलेंडर तारीख प्रकार (जिसे LocalDate डेट कहा जाता है) मिलता है, एक वास्तविक दीवार समय प्रकार (जिसे LocalTime टाइम कहा जाता है) और रचना (जिसे LocalDateTime कहा जाता है) मिलता है। यह पुरानी java.util.Calendar साथ तुलना में बहुत बड़ी जीत है। java.util.Datejava.util.Calendar और java.util.Date

घ) दोनों पुस्तकालय एक विधि केंद्रित दृष्टिकोण का उपयोग करते हैं जिसका मतलब है कि उपयोगकर्ता को प्राप्त करने के बजाय getDayOfYear() का उपयोग करने के लिए प्रोत्साहित करते get(DAY_OF_YEAR) इसके कारण java.util.Calendar की तुलना में बहुत अधिक अतिरिक्त विधियों का कारण बनता है (यद्यपि बाद में यह टाइप-सेफ़ नहीं है क्योंकि इनट्स के अत्यधिक उपयोग के कारण)

प्रदर्शन

@ ओओ 7 द्वारा दिए गए दूसरे उत्तर को मिखाइल वोरटोंटोव के विश्लेषण की ओर इशारा करते हैं, हालांकि 3 बिंदु (अपवाद पकड़ना) संभवतः अप्रचलित है – यह जेडीके-बग देखें अलग प्रदर्शन (जो JSR-310 के सामान्य पक्ष में है) मुख्य रूप से इस तथ्य की वजह से है कि जोड-टाइम का आंतरिक क्रियान्वयन मशीन-टाइम जैसी लंबी-आदिम (मिलिसेकंड्स में) हमेशा उपयोग करता है।

शून्य

जोडा-टाइम अक्सर सिस्टम समयक्षेत्र, डिफ़ॉल्ट लोकेल, वर्तमान टाइमस्टैम्प आदि के लिए डिफ़ॉल्ट के रूप में शून्य का उपयोग करते हैं। जबकि JSR-310 लगभग शून्य मूल्यों को खारिज कर देता है।

शुद्धता

JSR-310 नैनोसेकंड परिशुद्धता का संचालन करता है जबकि जोडा-टाइम मिलिसेकंड परिशुद्धता तक सीमित है।

समर्थित फ़ील्ड:

जावा -8 (जेएसआर -310) में समर्थित क्षेत्रों के बारे में अवलोकन अस्थायी-पैकेज में कुछ वर्गों (उदाहरण के लिए क्रोनफिल्ड और वीकफ़िल्ड ) द्वारा दिया जाता है, जबकि जौडा -टाइम इस क्षेत्र पर कमजोर है – देखें दिनांकटाइमफिल्ड टाईप । जोडा-टाइम की सबसे बड़ी कमी यहां स्थानीय सप्ताह से संबंधित क्षेत्रों की अनुपस्थिति है। दोनों क्षेत्र कार्यान्वयन डिजाइन का एक सामान्य विशेषता यह है कि दोनों प्रकार के मूल्यों पर आधारित हैं (कोई अन्य प्रकार नहीं, यहां तक ​​कि कुछ भी नहीं)।

enum

JSR-310 DayOfWeek या Month तरह DayOfWeek प्रदान करता है जबकि जोडा-टाइम यह प्रस्ताव नहीं देता क्योंकि यह मुख्य रूप से 2002-2004 के वर्षों में जावा 5 से पहले विकसित हुआ था।

जोन API

ए) JSR-310 जोडा-टाइम की तुलना में अधिक समयक्षेत्र प्रदान करता है लैटर टाइमज़न ऑफ़सेट ट्रांज़िशन के इतिहास में प्रोग्रामिंग का उपयोग करने में सक्षम नहीं है जबकि JSR-310 ऐसा करने में सक्षम है।

बी) आपकी जानकारी के लिए: JSR-310 ने अपने आंतरिक टाइमज़ोन रिपॉजिटरी को एक नए स्थान और एक अलग प्रारूप में स्थानांतरित कर दिया है। पुराना लाइब्रेरी फ़ोल्डर उदारीकरण / ज़ी मौजूद नहीं है।

समायोजक बनाम संपत्ति

JSR-310 ने TemporalAdjuster -interface को अस्थायी गणनाओं और जोड़तोड़ों को विशेष रूप से पुस्तकालय या फ्रेमवर्क-लेखकों के लिए बाह्य रूप में एक औपचारिक तरीके से पेश किया है, यह JSR-310 के नए एक्सटेंशन को स्थिर करने का एक अच्छा और रिश्तेदार आसान तरीका है (स्थिर के समान एक प्रकार का पूर्व के लिए सहायक वर्ग java.util.Date )।

हालांकि अधिकांश उपयोगकर्ताओं के लिए, इस सुविधा का बहुत सीमित मूल्य है क्योंकि कोड लिखने का बोझ उपयोगकर्ता के साथ अभी भी है। नए टेमोरल एडॉस्ट्रेटर के आधार पर अंतर्निहित समाधान बहुत ज्यादा नहीं हैं, वर्तमान में केवल हेलीकॉप्टर क्लास टेम्पलल एडॉस्टर्स हैं, जो कि जोड़तोड़ के सीमित सेट (और एम्स Month या अन्य लौकिक प्रकार) के साथ हैं।

जोडा-टाइम एक फ़ील्ड-पैकेज प्रदान करता है, लेकिन अभ्यास से सबूत दिखाया गया है कि कोडन के लिए नए क्षेत्र लागूकरण बहुत कठिन हैं। दूसरी तरफ, जोडा-टाइम, तथाकथित गुण प्रदान करती है, जो कि जेएसआर -310 की तुलना में कुछ जोड़तोड़ बनाते हैं, उदाहरण के लिए property.withMaximumValue () ।

कैलेंडर सिस्टम

JSR-310 4 अतिरिक्त कैलेंडर सिस्टम प्रदान करता है। सबसे दिलचस्प एक Umalqura है (सऊदी अरब में इस्तेमाल किया) अन्य 3 हैं: मिंगुओ (ताइवान), जापानी (1871 के बाद से केवल आधुनिक कैलेंडर!) और थाईबुद्धिस्त (केवल 1 9 40 के बाद सही)।

जूडा-टाइम कैलकुलेटरी बेस पर आधारित एक इस्लामी कैलेंडर प्रदान करता है- उमालकुरा ​​जैसे किसी दर्शन-आधारित कैलेंडर नहीं। थाई-बौद्ध भी एक समान रूप में जोडा-टाइम द्वारा की पेशकश की है, मिंगुओ और जापानी एक नहीं अन्यथा जोडा-टाइम कॉप्टिक और एथियोपिक कैलेंडर भी प्रदान करता है, (लेकिन अंतर्राष्ट्रीयकरण के लिए कोई समर्थन नहीं)।

यूरोपियों के लिए और अधिक रोचक: जोडा-टाइम भी ग्रेगोरीयन , जूलियन और मिश्रित-ग्रेगोरियन-जूलियन कैलेंडर प्रदान करता है। हालांकि, वास्तविक ऐतिहासिक गणनाओं के व्यावहारिक मूल्य सीमित हैं क्योंकि अलग-अलग साल जैसे महत्वपूर्ण विशेषताओं की तारीख इतिहास से शुरू होती है, ये सभी समर्थित नहीं हैं (वही आलोचना पुराने java.util.GregorianCalendar लिए मान्य है। java.util.GregorianCalendar )।

हिब्रू या फ़ारसी या हिंदू जैसे अन्य कैलेंडर पूरी तरह से दोनों पुस्तकालयों में गायब हैं

युग दिवस

JSR-310 में क्लास जूलियनफिल्ड है जबकि जुडा -टाइम (संस्करण 2.0) क्लास डेटटाइम यूटल्स में कुछ सहायक विधियों की पेशकश करता है।

घड़ियों

JSR-310 में कोई इंटरफ़ेस नहीं है (एक डिज़ाइन गलती) लेकिन एक अमूर्त वर्ग java.time.Clock जो किसी भी घड़ी निर्भरता इंजेक्शन के लिए इस्तेमाल किया जा सकता है। जोडा-टाइम इसके बजाय DateTimeUtils में इंटरफ़ेस MillisProvider और कुछ सहायक विधियों को प्रदान करता है। इसलिए इस तरह से जुदा-टाइम विभिन्न घड़ियों के साथ परीक्षण चालित मॉडल का समर्थन करने में भी सक्षम है (मजाक आदि)।

अवधि अंकगणित

दोनों पुस्तकालय एक या अधिक अस्थायी इकाइयों में समय की दूरी की गणना का समर्थन करते हैं। हालांकि, सिंगल-यूनिट-ड्यूरेशन को संभालने पर JSR-310-style स्पष्ट रूप से अच्छे (और int का उपयोग करने के बजाय लंबी अवधि):

JSR-310 => long days = ChronoUnit.DAYS.between(date1, date2);

जोडा-टाइम => int days = DAYS.daysBetween(date1, date2).getDays();

एकाधिक-यूनिट-अवधियों का संचालन भी अलग-अलग है। यहां तक ​​कि गणना के परिणाम अलग-अलग हो सकते हैं – यह बंद Joda-Time मुद्दा देखें । जबकि JSR-310 केवल क्लास Period (अवधि, महीनों और दिनों के आधार पर) और Duration (सेकंड और नैनोसेकंड के आधार पर) का उपयोग करने के लिए बहुत आसान और सीमित दृष्टिकोण का उपयोग करते हैं, जोडा-टाइम में क्लास PeriodType में अधिक परिष्कृत तरीके का उपयोग करता है जिन इकाइयों को एक अवधि (जोडा-टाइम को इसे "अवधि" कहते हैं) को नियंत्रित करने का आदेश व्यक्त किया जाएगा। PeriodType एपीआई किसी भी तरह से अजीब तरह का उपयोग करने के लिए JSR-310 द्वारा बिल्कुल भी उपलब्ध नहीं है। विशेष रूप से यह जेएसआर -310 में मिश्रित तारीख और समय के अवधियों (उदाहरण के लिए दिन और घंटे के आधार पर) को परिभाषित करने में अभी तक संभव नहीं है। इसलिए चेतावनी दी जानी चाहिए कि यह एक लाइब्रेरी से दूसरी में माइग्रेशन की बात आती है। चर्चा में पुस्तकालय असंगत हैं – आंशिक रूप से समान वर्ग के नामों के बावजूद।

अंतराल

JSR-310 इस सुविधा का समर्थन नहीं करता है जबकि जोडा-टाइम सीमित समर्थन है। यह भी देखें यह तो उत्तर

फ़ॉर्मेटिंग और पार्सिंग

दोनों पुस्तकालयों की तुलना करने का सर्वोत्तम तरीका समान-नामांकित कक्षाएं दिनांकटाइमफॉर्मबेटरबिल्डर (जेएसआर -310) और डेटटाइमफॉर्मबेटरबिल्डर (जोडा-टाइम) को देखने के लिए है। JSR-310-variant थोड़ा और अधिक शक्तिशाली है (किसी भी प्रकार की TemporalField को भी नियंत्रित कर सकता है, बशर्ते फ़ील्ड लागूकर्ता ने कुछ एक्सटेंशन बिंदुओं को हल करने के लिए प्रबंधित किया है जैसे हल () )। सबसे महत्वपूर्ण अंतर हालांकि है – मेरी राय में:

JSR-310 बहुत अच्छा समय क्षेत्र नाम (स्वरूप पैटर्न प्रतीक z) को बेहतर कर सकता है, जबकि Joda-Time इसके पहले के संस्करणों में बिल्कुल नहीं कर सका और अब केवल बहुत सीमित तरीके से।

JSR-310 का एक अन्य लाभ स्टैंडअलोन महीने के नामों के लिए समर्थन है जो कि रूसी या पोलिश आदि जैसी भाषाओं में महत्वपूर्ण है। जावा -8 प्लेटफार्मों पर भी नहीं, जोडा-टाइम का इस तरह के संसाधनों तक पहुंच नहीं है।

JSR-310 में पैटर्न सिंटैक्स जोडा-टाइम की तुलना में अधिक लचीला है, वैकल्पिक वर्गों (वर्ग कोष्ठकों का उपयोग करके) के लिए अनुमति देता है, सीएलडीआर-मानक के मुकाबले अधिक केंद्रित है और पैडिंग (पत्र प्रतीक पी) और अधिक फ़ील्ड प्रदान करता है

अन्यथा यह ध्यान दिया जाना चाहिए कि जोडा-टाइम पीरियडफ़ॉर्मर का उपयोग करते हुए प्रारूप को प्रारूपित कर सकता है । JSR-310 ऐसा नहीं कर सकता।


आशा है कि यह सिंहावलोकन मदद करता है सभी एकत्रित जानकारी मुख्य रूप से मेरे प्रयासों और जांच के कारण होती है कि कैसे बेहतर तिथि और समय की लाइब्रेरी को डिजाइन और कार्यान्वित करें (कुछ भी नहीं)।

2015-06-24 से अपडेट:

इस बीच मुझे जावा में अलग-अलग समय पुस्तकालयों के लिए एक सारणीय अवलोकन को लिखने और प्रकाशित करने का समय मिला है। तालिका में जोडा-टाइम v2.8.1 और जावा -8 (जेएसआर -310) के बीच की तुलना भी है। यह इस पोस्ट की तुलना में अधिक विस्तृत है।

जावा 8 तारीख / समय:

  1. जावा 8 कक्षाएं मानव समय के आसपास बनाई गई हैं। यह उन्हें मानव डेटटाइम अंकगणित / रूपांतरण के लिए तेज़ बनाता है।
  2. दिनांक / समय घटक प्राप्तकर्ता जैसे getDayOfMonth में ओ (1) जावा 8 के कार्यान्वयन में जटिलता है
  3. OffsetDateTime / OffsetTime OffsetDateTime / OffsetTime OffsetDateTime पार्सिंग जावा 8 ईए बी ZonedDateTime में बहुत धीमी है क्योंकि फेंक दिया अपवाद और जेडीके में आंतरिक रूप से पकड़ा गया है।
  4. संकुल का एक सेट: java.time.* , java.time.chrono.* , java.time.format.* , java.time.temporal.* , java.time.zone.*
  5. इन्स्टेंट्स (टाइमस्टैम्प) दिनांक और समय आंशिक दिनांक और समय पार्सर और फॉर्मेट समय क्षेत्र भिन्न कालानुक्रम (कैलेंडर)।
  6. मौजूदा कक्षाओं में ऐसे मुद्दों हैं जैसे दिनांक I18N या L10N के लिए कोई समर्थन नहीं है वे अस्थिर हैं!
  7. सरल और अधिक मजबूत
  8. घड़ियों को इंजेक्ट किया जा सकता है
  9. घड़ियों को विभिन्न गुणों के साथ बनाया जा सकता है – स्थैतिक घड़ियां, ठूंस घड़ियां, कम सटीक घड़ियां (पूरे सेकंड, पूरे मिनट, आदि)।
  10. विशिष्ट समय क्षेत्रों के साथ घड़ियों को बनाया जा सकता है Clock.system(Zone.of("America/Los_Angeles"))
  11. कोड हैंडलिंग तिथि और समय परीक्षण योग्य बनाता है।
  12. समयक्षेत्र से स्वतंत्र परीक्षण करता है

जोडा-टाइम:

  1. जोडा-टाइम मशीन का समय अंदर का उपयोग कर रहा है। इंट / लम्बी मानों के आधार पर मैन्युअल कार्यान्वयन बहुत तेजी से होगा
  2. जोडा-टाइम ग्रेटर को हर मिलने वाले कॉल पर कंप्यूटर से मानव समय की गणना की आवश्यकता होती है, जो ऐसे परिदृश्यों में जोडा-टाइम को बाधा उत्पन्न करता है।
  3. यह अपरिवर्तनीय वर्गों से बना है जो इसे इंस्टेंट्स, डेट एंड टाइम, आंशिक, और ड्यूरेसेस को संभालता है यह लचीला है यह अच्छी तरह डिज़ाइन किया गया है।
  4. प्रस्तुतियों के रूप में तारीखों का प्रतिनिधित्व करता है लेकिन एक तारीख और समय एक से अधिक तत्काल के अनुरूप हो सकता है। ओवरलैप घंटे जब डेलाइट बचत का अंत साथ ही इसमें कोई तत्काल कोई भी तत्काल मेल नहीं खाता है। दिन के शुरू होने पर गैप घंटे सरल कार्यों के लिए जटिल कम्प्यूटेशंस करने के लिए है
  5. इसके अधिकांश तरीकों पर मान्य मान मान्य नहीं है सूक्ष्म कीड़ों की ओर जाता है

अधिक विस्तृत तुलना के लिए देखें: –

जावा 8 दिनांक / समय पुस्तकालय प्रदर्शन (साथ ही साथ जोडा-टाइम 2.3 और जूलैलैंडर) । जावा 8 में और नई दिनांक और समय एपीआई