2009-09-19 9 views
17

संपादित करें 2009 से नवंबर-04टाइमस्पेन अनावश्यक है?

ठीक है, तो यह थोड़ी देर के बाद मैं पहली बार इस प्रश्न पोस्ट हो गया है। ऐसा लगता है कि शुरुआती उत्तरदाताओं में से कई वास्तव में जो कुछ कह रहे थे उसे पाने में असफल रहा - एक आम प्रतिक्रिया "आप जो कह रहे हैं वह कोई समझ नहीं लेती" पर कुछ भिन्नता थी - और इसलिए मैंने कुछ आसान बना दिया है वास्तव में मेरे बिंदु को चित्रित करने के लिए चित्र।

हम संख्या की बात करते हैं, हम आम तौर पर अंक के लिए सीखने क्या ग्रेड स्कूल के बच्चों कहा जाता है पर संख्या रेखा बात कर रहे हैं:

The number line

अब, जब हम गणित जानने के लिए, हमारे मन एक प्रदर्शन करने के लिए सीखना इस अवधारणा के बहुत ही रोचक परिवर्तन। अभिव्यक्ति 1 + 0.5 Evalutating, उदाहरण के लिए, अगर हम केवल हमारे "नंबर लाइन सोच" लागू किया, किसी भी तरह इस की समझ बनाने के लिए हमें की आवश्यकता होगी:

Adding two points on the number line

यह मुश्किल है वास्तव में है कि वर्णन करने के लिए है, क्योंकि यह मुश्किल है इसके बारे में सोचें: "दो अंक" जोड़ना। यह वह जगह है जहां कई उत्तरदाताओं ने तारीखों को जोड़ने के विचार से संघर्ष किया (या बस इसे बेतुका के रूप में खारिज कर दिया), क्योंकि वे अंक के रूप में तारीखों के बारे में सोच रहे थे।

हालांकि

, अभिव्यक्ति 1 + 0.5क्योंकि जब हम के बारे में सोच, हम वास्तव में इस कल्पना कर रहे हैं, हमें मेकअप भावना करता है:

Adding a number (point) and a magnitude (vector)

है, संख्या (या बिंदु) 1, प्लस vector 0.5, जिसके परिणामस्वरूप बिंदु 1.5।

वैकल्पिक रूप से, हम इस कल्पना की जा सकती है:

Adding two vectors

है, वेक्टर 1, प्लस वेक्टर 0.5, वेक्टर 1.5 में जिसके परिणामस्वरूप।

दूसरे शब्दों में, संख्याओं से निपटने पर, हम बिंदुओं और वैक्टरों को एक दूसरे के साथ व्यवहार करते हैं। लेकिन तिथियों के बारे में क्या? तिथियां, आखिरकार, संख्याएं हैं।

A timeline

सूचना समय और नंबर लाइन के बीच पत्राचार: अगर तुम मुझे विश्वास नहीं है, ऊपर दिए गए नंबर लाइन के लिए इस लाइन की तुलना? यह मेरा मुद्दा था: यदि हम ऊपर संख्या के साथ रूपांतरण करते हैं, तो हमें इसे तिथियों के साथ भी करने में सक्षम होना चाहिए।तो, लागू करने के "समय सोच", अभिव्यक्ति 0001-Jan-02 00:00:00 + 0001-Jan-01 12:00:00 भावना का एक बहुत बनाने के नहीं है, के रूप में प्रतिसाददाताओं के बहुत सारे ने कहा:

Adding two points on a timeline

लेकिन, अगर हम अपने सिर में एक ही वैचारिक परिवर्तन करना कि हम प्रदर्शन हर बार जब हम जोड़ सकते हैं या संख्या घटाना, हम आसानी से ऊपर इस रूप में "पुनर्विचार" कर सकते हैं:

Adding a point in time and a time vector

तो स्पष्ट रूप से, के बीच का अंतर एक DateTime और TimeSpan एक ही अंतर है जो एक बिंदु और एक वेक्टर के बीच मौजूद है। मुझे लगता है कि मेरे सुझाव के लिए बहुत से लोगों को नकारात्मक प्रतिक्रिया देने का कारण यह है कि इस तरह से परिमाण के रूप में तारीखों के बारे में सोचने के लिए यह इतना अप्राकृतिक लगता है। लेकिन मैं तर्क नहीं खरीदता कि शून्य के रूप में उपयोग करने के लिए कोई स्पष्ट संदर्भ बिंदु नहीं है। एक स्पष्ट संदर्भ बिंदु है, और मैं आपको एक संकेत देता हूं जहां यह है: लगभग 2010 साल पहले।

मुझे गलत मत करो: मैं एक DateTime और एक TimeSpan की धारणा के बीच एक वैचारिक विभाजन ड्राइंग का उपयोगिता पूछताछ नहीं कर रहा हूँ। असल में, मेरे प्रश्न के साथ-साथ होना चाहिए (जैसा कि क्रिसडब्ल्यू अप्रत्यक्ष रूप से सुझाया गया है), क्यों नियमित संख्यात्मक प्रकारों से निपटने के दौरान हम संख्याओं और वैक्टरों को एक दूसरे के साथ व्यवहार करते हैं? (या: हमारे पास int प्रकार क्यों है, int और intspan के बजाय?) इसमें एक बड़ा अंतर है, और फिर भी जब हम ज्यामिति शुरू करते हैं तो हम कभी भी जूनियर हाई या हाईस्कूल में कभी भी इसके बारे में कभी नहीं सोचते हैं। और फिर इसे इस नए गणितीय अवधारणा के रूप में माना जाता है, जब वास्तव में यह कुछ ऐसा होता है जिसे हम कभी भी उपयोग कर रहे हैं क्योंकि हमने अपनी उंगलियों के साथ गिनती करके संख्याओं को जोड़ना सीखा है।

अंत में, सबसे अच्छा जवाब Strilanc, जो ने कहा कि DateTime और TimeSpan के उपयोग वास्तव में एक affine space है, जो मूल रूप में इलाज के लिए एक संदर्भ बिंदु की जरूरत नहीं की सुविधाजनक संपत्ति है के एक कार्यान्वयन है से आया है। तो धन्यवाद, स्ट्रिलैंक। मैं क्रिसवे को स्वीकार्य उत्तर दे रहा हूं, हालांकि, वेक्टर और अंक की अवधारणा को लाने वाले पहले व्यक्ति होने के लिए, जो वास्तव में इस मामले के क्रूक्स को मिला।


(भावी पीढ़ी के लिए)

मूल प्रश्न मैं निश्चित रूप से सभी ट्रेडों का कोई प्रोग्रामिंग जैक हूँ, लेकिन मैं जानता हूँ कि दोनों PHP और नेट एक DateTime वर्ग के अलावा (या संरचना में एक TimeSpan वर्ग है .NET में), और मुझे लगता है कि यह कई अन्य भाषाओं और ढांचे में भी मामला है (हालांकि मैं इसे मुख्य रूप से .NET संरचनाओं के संदर्भ में लिख रहा हूं)। यह एक अजीब सवाल प्रतीत हो सकता है, लेकिन TimeSpan अनावश्यक नहीं है?

यदि आपको लगता है कि उत्तर स्पष्ट है ("DateTime समय में एक पूर्ण बिंदु है, जबकि TimeSpan समय की एक सीमा है - सरल है!"), इस पर विचार करें: एक पूर्णांक को या तो संकल्पनात्मक किया जा सकता है मानों के बीच एक पूर्ण मूल्य (संख्या रेखा पर बिंदु) या दूरी - और हमें इन विभिन्न अवधारणाओं के लिए दो अलग-अलग डेटा प्रकारों की आवश्यकता नहीं है। मैं अभी भी 5 + 6 लिख सकता हूं बिना किसी अस्पष्टता के मेरे लिखने के लिए।

जब तक एक सुसंगत शून्य बिंदु संदर्भ नहीं है के रूप में, मुझे लगता है कोई कारण नहीं क्यों एक एक TimeSpan वस्तु की आवश्यकता होगी DateTime वस्तुओं पर अंकगणितीय आपरेशनों प्रदर्शन करने के लिए, या उनके बीच की दूरी प्राप्त करने के लिए होना चाहिए।

मुझे क्या याद आ रही है? TimeSpan संरचना के अद्वितीय तरीकों और गुणों को केवल DateTime में क्यों जोड़ा जा सकता है?

(अस्वीकरण: यह पसंद नहीं है कि मैं इस या कुछ भी के बारे में भावुक हूँ, मैं ठीक के रूप में वे हर समय का इरादा कर रहे हैं DateTime और TimeSpan वस्तुओं का उपयोग कर मैं सिर्फ एक सवाल पूछ रहा हूँ कर रहा हूँ।।)

संपादित: ठीक है, उदाहरण के अति सरल मेरी बात को वर्णन करने के:

पर विचार समीकरण 10 - 5 = 5. वन के रूप में "10 (मूल्य) पर शुरू इस पढ़ा है, बाईं ओर ले जाने के लिए 5 सकता है (अवधि), और आप 5 (मूल्य) पर समाप्त होते हैं। "

मान लीजिए, बस चीजों को आसान बनाने के लिए, हमने 1 जनवरी 1 9 00 को शून्य बिंदु दिया और हम केवल TimeSpan वस्तुओं को केवल दिनों के संदर्भ में परिभाषित करते हैं।

फिर 10 - 5 = 5 जनवरी के रूप में, समझा जा सकता है DateTime संदर्भ में, 11 1900 - जनवरी 6 1900 = जनवरी 6 1900 क्योंकि 11 जनवरी सिर्फ "10" है हमारी परिभाषा और 6 जनवरी तक यह ठीक है "5" है। तथ्य यह है कि हम 0 को मान के रूप में देख रहे हैं, स्पैन के रूप में पहला 5, और मान के रूप में अंतिम 5 केवल हमारे अपने वैचारिक लाभ के लिए है। मेरा मुद्दा यह है कि: केवल अंतर यह है कि आप संख्या के बारे में क्या सोचते हैं, वास्तव में यह वास्तव में नहीं है। यही कारण है कि हमारे पास अलग-अलग संरचनाएं नहीं हैं, कहें, पूर्णांक मान और पूर्णांक स्पैन - एक सादा पुराना पूर्णांक हमारे सभी अड्डों को कवर करता है।

क्या मुझे कोई समझ है?

+2

@ हेंक: हाहा, नाटक मत करो कि यह भयानक नहीं होगा। –

+0

10 दिनों की अवधि में कितने मंगलवार हैं? – recursive

+0

@recursive: जैसा कि हर कोई सब कुछ कह रहा है, यह आपके शून्य बिंदु पर निर्भर करता है, जो .NET सोमवार, 01 जनवरी, 0001 (डेटटाइम.इनवैल्यू) के रूप में है - तो जवाब 2 होगा। लेकिन ऐसा लगता है कि आप कोशिश कर रहे हैं मेरे प्रश्न के बारे में कुछ बकवास करने के लिए; इसलिए मैं आपको एक बिंदु का पालन करने के लिए कहूंगा, मेरे बिंदु को स्पष्ट करने के लिए लगभग समान प्रश्न: 8 की अवधि में 5 के कितने गुणक हैं? –

उत्तर

12

इस पर विचार करें: एक पूर्णांक या तो एक निरपेक्ष मान (नंबर लाइन पर बिंदु) या मूल्यों के बीच एक दूरी रूप में की अवधारणा जा सकती है

आपके तर्क से, यह टाइमस्पैन नहीं है जो अनावश्यक है: बल्कि यह दिनांक समय है जो अनावश्यक है, और टाइमस्पेन (शून्य से अवधि) द्वारा प्रतिस्थापित किया जा सकता है।

प्लस यह तथ्य है कि पूर्णांक के पास शून्य शून्य है, जबकि तिथियों के पास स्पष्ट शून्य नहीं है; लेकिन एक स्पष्ट शून्य होना आवश्यक है, यदि आप "संख्या रेखा पर स्थान" को "शून्य/मूल से दूरी/अवधि" के साथ प्रतिस्थापित करना चाहते हैं।


संपादित करें:

एक बिंदु (एक विमान पर स्थान) एक वेक्टर के रूप में ही नहीं है।

वे समान लगते हैं ...

  • एक वेक्टर (मूल से दूरी) एक बिंदु
  • एक बिंदु (मूल के सापेक्ष) का प्रतिनिधित्व एक वेक्टर

प्रतिनिधित्व कर सकते हैं कर सकते हैं .. हालांकि, उत्पत्ति में परिवर्तन होने पर वेक्टर का मान किसी दिए गए बिंदु का प्रतिनिधित्व करने के लिए आवश्यक होगा।

यह हमेशा दो (रिश्तेदार) वैक्टर जोड़ने के लिए समझ में आता है; लेकिन, उन बिंदुओं को वेक्टर में परिवर्तित करके और फिर वेक्टर जोड़कर, दो बिंदुओं को जोड़ने का कोई मतलब नहीं है।

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

मुझे लगता है कि निरपेक्ष और सापेक्ष मूल्यों के बीच एक वास्तविक अंतर नहीं है [DATETIME साथ 'बिंदु' और इसके बाद के संस्करण तर्क में TimeSpan के साथ 'वेक्टर'। बदलें]। मुझे नहीं पता कि यह अंतर अंकगणित में अधिक स्पष्ट क्यों नहीं है, यानी क्यों 'संख्या' का उपयोग पूर्ण और सापेक्ष मूल्यों का प्रतिनिधित्व करने के लिए प्रतीत होता है।

+0

पर्याप्त मेला - मुझे लगता है कि मेरा मुख्य बिंदु होना चाहिए कि डेटटाइम और टाइमस्पैन को जोड़ा जा सकता है, बजाय टाइमस्पेन को विशेष रूप से समाप्त किया जाना चाहिए। –

+1

मैं असहमत हूं: दान के तर्क से, डेटटाइम और टाइमस्पैन के बीच वास्तव में कोई अंतर नहीं है। वे एक ही अवधारणा के विभिन्न उदाहरण हैं। इसलिए मुझे लगता है कि उनमें से एक दूसरे को अप्रचलित करना गलत है। – Joren

+0

इसके अलावा, पूर्णांक केवल एक स्पष्ट शून्य है क्योंकि हम मनमाने ढंग से परिभाषित करते हैं। कोई समन्वय या अनुक्रमण प्रणाली सापेक्ष है। – Joren

18

एक तिथि एक पूर्णांक की तरह व्यवहार नहीं करता है, मैं बीजगणित के वर्गीकरण याद नहीं आ रहा है, लेकिन इस पर विचार करें:

Date + Span = Date 
Date - Date = Span 
Date + Date = undefined 

Span + Span = Span 
Span - Span = Span 

किसी भी वर्ष के लिए, पिछले गणना हो सकता है

10 feb + 10 days = 20 feb 
20 feb - 20 jan = 31 days 
20 jan + 20 feb = ??? 

कि जब हम दिनांक-से-स्टार्टडेट के रूप में दिनांक मानते हैं तो सार्थक के रूप में व्याख्या की जाती है। लेकिन मूल्य स्टार्टडेट के choiche के रूप में मनमाना के रूप में होगा।

+0

लेकिन आप उपयुक्त तरीकों के माध्यम से तिथियों को जोड़ और घटा सकते हैं, जैसे कुछ दिनांक। एडडेज़ (...) आदि, है ना? – Juri

+1

जूरी, हाँ, लेकिन डेटटाइम + दिन और दिन एक टाइमस्पैन है। –

+0

@ हेंक: दिन 'डबल' है, न कि 'टाइमस्पेन'। यह 'टाइमस्पेन' होने का कोई अर्थ नहीं होगा क्योंकि 'टाइमस्पेन' अपने पैमाने को परिभाषित करता है। –

4

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

इसके अलावा, इंटेलिसेन्स (और नए लोगों के लिए खोज) बेहतर काम करता है जब सदस्यों की संख्या कम होती है - दोनों प्रकार के बीच विभाजित तरीकों से, प्रत्येक के साथ काम करना आसान हो जाता है।

12

(गणितज्ञ के रूप में बोलना) ऐसा इसलिए है क्योंकि "तिथि" पर अंकगणितीय संचालन बंद या अच्छी तरह परिभाषित नहीं हैं, अतिरिक्त संरचना की आवश्यकता को जरूरी है।

उदाहरण के लिए, 1 जनवरी, 2000 - 1 दिसंबर, 1 999 = ...? हम जानते हैं कि उनके बीच 31 दिन हैं, लेकिन यदि इसे किसी तारीख के रूप में व्याख्या किया गया था, तो उत्तर एपोक (यानी शून्य) + 31 दिन है।यह अब वैध "तारीख" नहीं है।

इसी तरह, पूर्णांक पर सभी अंकगणितीय परिचालन अच्छी तरह से परिभाषित नहीं हैं (1/2 के पूर्णांक में कोई जवाब नहीं है .. पूर्णांक गणित शून्य शून्य देता है, लेकिन 0 * 2 = 0, जैसा कि आप उम्मीद करेंगे 1)। यह एक अतिरिक्त संरचना की आवश्यकता को जरूरी है जिसे हम अंश कहते हैं।

+0

जैसा कि आप कहते हैं, 1 जनवरी 2000 - 1 दिसंबर, 1 999 में उनके बीच 31 दिन हैं। तो उत्तर 31 दिन होना चाहिए, और यदि आप दूरी को जानना चाहते हैं तो डेटटाइम में कुल दिन संपत्ति होनी चाहिए और आपको लिखने में सक्षम होना चाहिए (दिनांक 1 - दिनांक 2)। आजकल। सही? एपोक + 31 दिन क्यों "वैध तिथि नहीं है"? –

+2

कई कारणों से, मेरा पसंदीदा यह है कि 1528 में ग्रेगोरियन कैलेंडर की शुरूआत से पहले, "दिन" की लंबाई अब उससे अलग थी। तो यदि आपके पास डेटटाइम कार्यान्वयन है जो ऐसी चीजों से अवगत है, (दिनांक 1 - दिनांक 2) + दिनांक 2! = दिनांक 1। (.NET कार्यान्वयन बहुत अच्छा है, लेकिन मुझे नहीं पता कि यह आपके लिए कैलेंडर्स स्लाइड करता है :)। – Seth

+0

सेठ, मुझे लगता है कि आपकी टिप्पणी वास्तव में इसके क्रूक्स पर पहुंच जाती है, मुझे लगता है कि आपको इसे अपने उत्तर में शामिल करना चाहिए। –

-1

अपने चीनी नहीं कम या ज्यादा ....

+7

'डेटटाइम' और 'टाइमस्पेन' दोनों आंतरिक रूप से संख्याओं द्वारा प्रतिनिधित्व किए जाते हैं, लेकिन न तो वास्तविक संख्या है। यदि 'टाइमस्पेन' चीनी है, तो 'int []', 'char []', और 'स्ट्रिंग' केवल बाइट [] 'के लिए चीनी है। चूंकि यह एक अर्थहीन स्तर पर सिंटैक्टिक चीनी के अर्थ को पतला कर देगा, हम मान सकते हैं कि 'टाइमस्पेन' चीनी को बुलाया जाना अनमोल है। –

+0

जबकि उत्तर थोड़ा सा है, उत्तर कोई भी कम सही नहीं है। यहां एक डाउन वोट सिर्फ इतना कहता है, "मैं समझ नहीं पा रहा हूं कि वह क्या कह रहा है" इससे भी अधिक "यह गलत है"। असल में, डेटटाइम और टाइमस्पेन दोनों अनावश्यक हैं, यदि आप "एक्स एक्स वाई के बाद से सेकंड की संख्या" का उपयोग करके तिथियों की गणना करने के लिए मर जाएंगे। –

+2

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

0

मुझे लगता है कि आप विपरीत तर्क कर सकता है कि DateTime अनावश्यक है, और हम केवल TimeSpan :)

गंभीरता से, सभी तिथियों वास्तव में सिर्फ समयावधियों हैं होना चाहिए। वे सभी कुछ शुरुआती बिंदु से संबंधित हैं। तकनीकी रूप से, ईसाई कैलेंडर में कोई "वर्ष शून्य" नहीं है (क्योंकि आपके पास वास्तव में "हमारे स्वामी का शून्य वर्ष" नहीं हो सकता है), लेकिन अगर हम 12:00 एएम असाइन करते हैं। 1 जनवरी, 0001 बी.सी. "शून्य बिंदु" के रूप में, फिर (या उससे पहले) आने वाली प्रत्येक तारीख को उस तारीख के सापेक्ष माना जा सकता है। तो, 12:00 एएम 1 9 सितंबर, 200 9 को 734033 दिनों का टाइमस्पेन होगा।

तो, गणितीय, DateTime और TimeSpan अनावश्यक हैं। लेकिन जब हम कोड लिखते हैं, तो हम केवल अमूर्त गणितीय संरचनाओं से ज्यादा संवाद करने का प्रयास कर रहे हैं। किसी दिए गए DateTime उदाहरण वास्तव में कुछ मनमाने ढंग से शून्य बिंदु के सापेक्ष एक समय अवधि हो सकता है, लेकिन अधिकांश लोगों को आपके कोड को पढ़ने के लिए, यह कैलेंडर पर एक विशेष बिंदु दर्शाएगा। इसी तरह, TimeSpan कैलेंडर पर दो बिंदुओं के बीच का अंतर दर्शाता है।

इस मामले में, माइक्रोसॉफ्ट ने पार्सिमोनियस के बजाय स्पष्ट होना चुना है। मैं नहीं कह सकता कि मैं निर्णय से असहमत हूं।

+0

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

+0

@Pete, सुनिश्चित नहीं है कि मैं आपका प्रश्न समझता हूं। हम इसे आज हर करते हैं। आज 09/19/09 है। यह नौ महीने, उन्नीस दिन और 1 ईसा पूर्व के 200 9 साल बाद है। पूर्ण तिथि सिर्फ एक समय अवधि है। – devuxer

2

दूसरे तरीके से पूछे जाने पर: उस संबंध में प्रकार प्रणाली को कमजोर करने का क्या फायदा होगा?

यह लागत बनाम लाभ का एक प्रश्न है और DateTime इस तरह के कार्यों को मना कर अजीब तारीख/समय गणना के कारण बग को कम करने का बड़ा लाभ है। DateTime बहुत ही कारणों से मौजूद है कि सख्त प्रकार-जांच प्रणाली पहले स्थान पर मौजूद है: कोड में अर्थपूर्ण त्रुटियों को संकलित करने के लिए संदेश लिखने के लिए। जो उनके कोड में त्रुटियों के प्रोग्रामर को सूचित करते हैं।

इसके विपरीत, DateTime होने की लागत है: zilch।

अब DateTime छोड़ने पर विचार करें। हम क्या हासिल करेंगे?

सीधे अपने प्रश्न का उत्तर देने के लिए: "TimeSpan अनावश्यक नहीं है?" बिलकुल नहीं, यह बग को कम करता है। यह निश्चित रूप से मेरे लिए है।

2

इसके बारे में अवधारणा के बारे में सोचें। अगर मैं आपको बता दूं कि मेरे पास 7 दिनों से पार्टी है, तो उस वाक्य में "7 दिन" एक तारीख है। क्या मैं बस कह सकता हूं कि मेरी पार्टी 7 दिनों पर है? बेशक नहीं, क्योंकि 7 दिन एक तारीख नहीं है। ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के प्रमुख विचारों में से एक सिस्टम में इस तरह की अवधारणाओं को प्रकार के रूप में प्रस्तुत करना है। यह सच है कि हम सब कुछ एक पूर्णांक के रूप में प्रतिनिधित्व कर सकते हैं (और वास्तव में, बहुत से लोगों के पास है और करते हैं), लेकिन ऑब्जेक्ट उन्मुख प्रोग्रामिंग में, हमारे पास वस्तुओं के प्रकार, और उनके व्यवहार और गुणों की धारणा है, और इस अर्थ में, यह बनाता है एक वस्तु है जो इसे व्यक्त करती है।

5

सिर्फ इसलिए कि आप एक ऑपरेशन को परिभाषित कर सकते हैं इसका मतलब यह नहीं है कि होना चाहिए। उदाहरण के लिए, शून्य के कारणों में से एक कारण अनिर्धारित है क्योंकि इसे परिभाषित करने के लिए अंकगणित (उदाहरण के लिए सहयोगी आदि) के कुछ बहुत ही उपयोगी गुणों को त्यागना होगा।

एक समय और दिनांक के बीच भेद अतिरिक्त करने के लिए नीचे आता है। दो बार पंसद जोड़ना समझ में आता है, लेकिन दो तारीख जोड़ने की समझ में नहीं आता है जब तक कि आपके पास मनमाने ढंग से संदर्भ दिनांक नहीं है। तिथियों को जोड़ने की इजाजत नहीं देकर, आप उस मनमाना संदर्भ दिनांक को दूर करते हैं। मुझे नहीं पता कि '0' किस दिनांक में है .Net, और मुझे कभी जानने की आवश्यकता नहीं है। क्या यह अच्छा नहीं है?

दो तिथियां जोड़ना लगभग हमेशा एक बग है (गंभीरता से, यह सोचने की कोशिश करें कि यह अंक विज्ञान के बाहर कहां समझता है)। टाइमपैन पेश करके (Affine Space बनाना) आप बग की पूरी कक्षा को खत्म कर देते हैं।

0

वहाँ उदाहरण के लिए, दिनांक में जटिलताओं का एक बहुत हैं:

  • छलांग सेकंड

    • लीप वर्ष
    • ग्रेगोरियन कैलेंडर
    • तथ्य ऐसी कोई बात नहीं है कि 1582 परिवर्तन 0 साल
    • महीनों की लंबाई में अंतर

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

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