Joda-Time: अवधि, अंतराल और अवधि के बीच अंतर क्या है?


192

में Joda समय 2 समयावधियों के तीन प्रकार के बीच अंतर क्या है:

  • अवधि
  • मध्यान्तर
  • समयांतराल

    1. हमें तीन वर्गों की आवश्यकता क्यों है?

    2. कौन सा बेहतर प्रदर्शन करता है?

    3. क्यों है विभाजित एक अवधि या अवधि या अंतराल उदाहरण लागू नहीं किया? उदाहरण के लिएp = p.divideBy(2);


3
ध्यान दें कि यह तिथि-समय शब्दावली मानकीकृत (अभी तक) नहीं हुई है। आईएसओ 8601 एक के मानक के विचार अवधि क्या Joda समय एक पर विचार करती है Period। ऐसी शब्दावली को मानकीकृत करने का प्रस्ताव उठाया गया है लेकिन अभी तक पूरा नहीं किया गया है।
बेसिल बोर्कल

जवाबों:


246

3 वर्गों की आवश्यकता है क्योंकि वे विभिन्न अवधारणाओं का प्रतिनिधित्व करते हैं इसलिए यह सापेक्ष प्रदर्शन के बजाय नौकरी के लिए उपयुक्त चुनने की बात है। इटैलिक में मेरे द्वारा जोड़े गए टिप्पणियों के प्रलेखन से :


एक अंतराल Joda समय में एक और तत्काल करने के लिए एक मिलीसेकंड तत्काल से समय के अंतराल का प्रतिनिधित्व करता है। दोनों क्षेत्र डेटाइम सातत्य में पूरी तरह से निर्दिष्ट उदाहरण हैं, जो समय क्षेत्र के साथ पूर्ण होते हैं। विशिष्ट समय को परिभाषित किया जाता है जैसे कि यह 20: 00: 00GMT के बीच का अंतराल हो सकता है और आज सुबह 09: 00: 00GMT हो सकता है।

एक अवधि Joda समय में मिलीसेकेंड में मापा समय की अवधि का प्रतिनिधित्व करता है। अवधि अक्सर एक अंतराल से प्राप्त की जाती है। यानी हम एक अवधि प्राप्त करने के लिए एक अंतराल के अंत से शुरुआत को घटा सकते हैं

एक अवधि Joda समय में क्षेत्रों के संदर्भ में परिभाषित समय की अवधि, उदाहरण के लिए, 3 साल 5 महीने 2 दिन और 7 घंटे का प्रतिनिधित्व करता है। यह इस अवधि से भिन्न है कि यह मिलीसेकंड के संदर्भ में अक्षम है। एक अवधि को केवल एक ही संख्या में मिलीसेकंड पर हल किया जा सकता है, यह तात्कालिक (कालक्रम और समय क्षेत्र सहित) निर्दिष्ट करके। उदाहरण के लिए 1 वर्ष की अवधि पर विचार करें, यदि हम इसे 1 जनवरी से जोड़ते हैं तो हम हमेशा अगली जनवरी 1 को पहुंचेंगे लेकिन अवधि इस बात पर निर्भर करेगी कि हस्तक्षेप वर्ष एक लीप वर्ष है या नहीं। इसी तरह अगर हम 1 महीने को 1 महीने के लिए जोड़ते हैं तो हम अगले महीने की 1 तारीख को पहुंचेंगे लेकिन सवाल के आधार पर अवधि (मिलीसेकंड में) अलग-अलग होगी


प्रश्न 3 के लिए, एक अवधि को विभाजित करने के लिए एक विशिष्ट विधि की वास्तव में आवश्यकता नहीं है क्योंकि हम हमेशा एक long(उपयोग getMillis()) के रूप में अवधि से मिलीसेकंड की संख्या प्राप्त कर सकते हैं , इसे विभाजित कर सकते हैं और एक नई अवधि (उपयोग करके new Duration(long duration)) का निर्माण कर सकते हैं ।

किसी अवधि को विभाजित करना वास्तव में ऊपर की अवधि की परिभाषा के आधार पर वास्तविक अर्थ नहीं है। जैसे आधा महीना क्या है? (इसकी लंबाई किस महीने पर निर्भर करेगी)।


1
मुझे लगता है कि किसी अवधि को विभाजित करने का एक अर्थ है - आधा महीना अभी भी समय की एक वैध इकाई है, लेकिन यह जानने के लिए एक शुरुआत की तारीख की आवश्यकता है कि वास्तव में कितनी देर तक (ठीक उसी तरह एक महीना एक वैध अवधि है)।
हैडले

11
जोडाटाइम एक अवधि को इंटीग्रेटेड वैल्यू फील्ड का टपल मानता है, यह भिन्नात्मक मूल्यों की अनुमति नहीं देता है। यह आम (सिविल) उपयोग के अनुरूप है। व्यावहारिक रूप से आम जीवन में कोई भी यह नहीं मानता है कि '1 महीना और 10 दिन' दो से विभाजित 'आधा महीना और 5 दिन' है। यदि आपको वह विभाजन करने की आवश्यकता है, तो आप संभवतः एक अवधि (भौतिक समय) पर जाना चाहते हैं।
leonbloy

90

Mikej के जवाब में जोड़ने के लिए :

एक Joda- समय अवधि एक "भौतिक" समय अंतराल है; उदाहरण के लिए:

12000 milliseconds <- यह एक अवधि है

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

(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC) <- यह एक अंतराल है

एक अंतराल , फिर, एक अवधि में परिवर्तित किया जा सकता है , लेकिन रिवर्स नहीं।

इन दो अंतरालों पर विचार करें:

I1=(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC)

I2=(2010/3/3 21:00:00.000 UTC ; 2010/3/3 22:00:00.000 UTC)

अंतराल के रूप में, I1और I2अलग हैं, क्योंकि अंत-बिंदु अलग हैं; लेकिन अगर मैं उन्हें अवधि में परिवर्तित करता हूं, तो मुझे वही मिलता है 3600000 milliseconds:।

(गणित सादृश्य: अंतराल [10,12]और [95,97]अलग-अलग अंतराल हैं , लेकिन उनकी लंबाई समान है : "अंतराल लंबाई" अवधि के लिए नक्शे )।

अंत में, एक अवधि "नागरिक समय" का एक अंतराल है, जिसे कई महीनों, दिनों, घंटों आदि के रूप में व्यक्त किया जाता है। यह स्वयं नहीं है- "भौतिक" अंतराल का प्रतिनिधित्व करता है, इसलिए इसे सीधे रूप में परिवर्तित नहीं किया जा सकता है। अवधि (महीनों में परिवर्तनशील लंबाई है ...)।

यह प्रश्न 3 का उत्तर देता है: आप केवल दो भौतिक समय (एक अवधि) से विभाजित कर सकते हैं।


दो से विभाजित चार महीने दो महीने होंगे। यह मान्य क्यों नहीं है?
हैडले

1
आप '2 महीने' की गणना कैसे करेंगे; 18 दिनों के 3 से विभाजित? आप उस तरह के ऑपरेशन के लिए एक सुसंगत परिभाषा प्राप्त नहीं कर सकते।
'13:40 पर leonbloy

3
मुझे लगता है कि आप एक सुसंगत परिभाषा प्राप्त कर सकते हैं, लेकिन आपको "2 महीने और 18 दिन" के समय के 1/3 के बारे में सोचना होगा। जब तक आप इसे एक अंतराल में परिवर्तित नहीं करेंगे, तब तक आप ठीक से काम नहीं कर पाएंगे। सिर्फ इसलिए कि Joda समर्थन नहीं करता इसका मतलब यह नहीं है कि यह अमान्य है।
हैडले

@hadley "एक दिन का एक तिहाई" के लिए एक नागरिक परिभाषा नहीं है। उदा। कोई भी अनुबंध एक दिन के एक तिहाई के लिए मान्य नहीं है।
ipavlic

4
@ रिचर्ड वॉट्सन डीएसटी के कारण 23, 24 या 25 घंटे लंबे हो सकते हैं। इसलिए "एक दिन से शुरू होने वाला एक तिहाई ..." मान्य है, लेकिन सिर्फ "एक तिहाई" नहीं है।
ipavlic
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.