एक सच्चा "दिनांक-केवल" डेटा प्रकार क्यों नहीं है?


24

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

मैंने "डेट-ओनली" रिकॉर्ड्स के टाइम पार्ट को "दोपहर" तक सेट करने के लिए उपयोग किया है (जो कि तारीख को कभी भी बदलते समय से बचा जाता है)। यह एक हैक की तरह लगता है, और मैं हमेशा इस मुद्दे पर यात्रा करने वाले कनिष्ठ देवों से बग ढूंढ रहा हूं।

समय हमेशा एक निश्चित बिंदु के सापेक्ष होता है। 4PM 4 घंटे की पोस्ट मध्याह्न, या दोपहर है। पारगमन में सूर्य का उच्चतम बिंदु अवलोकनीय है, और हमें एक समन्वय प्रणाली स्थापित करने की अनुमति देता है। दोपहर से 3 घंटे पहले (Ante Meridian), दोपहर के 2 घंटे बाद, 1 जनवरी, 1970 से 1441899402938 मिलीसेकंड। कार्टेशियन दुनिया में लोगों के लिए यह दूसरी प्रकृति है।

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

इसी तरह वर्षों से दोहरा रहे हैं। प्रत्येक 365 दिन (या तो) मेरे लिए कई विशेष दिन हैं: जन्मदिन, वर्षगाँठ, बच्चों का जन्मदिन, आदि। व्यापार शेड्यूलिंग एप्लिकेशन हर सात दिनों की बैठकों के उदाहरणों के साथ व्याप्त हैं, महीने के पहले मंगलवार, आदि। हम इसे एक फ्लोटिंग पॉइंट नंबर पर मैप कर सकते हैं, और सच में मैपिंग में कहा गया है कि नंबर बहुत सारी समस्याओं को हल करता है जो वास्तव में पुराने तरीके से कठिन हैं, लेकिन इसका मतलब यह नहीं है कि इसे करने का एकमात्र तरीका है।

डेट्स स्टोर करने के लिए डेटटाइम्स का उपयोग करने की प्रकृति "एक गोल छेद में वर्ग खूंटी" की जागरूकता और समझ आपको मेरी राय में एक बेहतर प्रोग्रामर बनाती है।

क्या किसी एप्लिकेशन क्लास को परिभाषित करने में शेड्यूलिंग एप्लिकेशन के रूप में स्पष्ट रूप से अभिप्रेरित मूल्य है, या सबसे अच्छा तरीका "दोपहर से दोपहर तक" सेट है? दिनांक समय का उपयोग करने और दोपहर को समय घटक सेट करने में क्या समस्याएं हो सकती हैं? क्या इस तरह के दृष्टिकोण में टाइमजोन शिफ्टिंग का हिसाब किया जा सकता है? मैंने MomentJS का उपयोग किया है, लेकिन मुझे लगता है कि यह सिर्फ एक बेहतर डेट क्लास है।


7
यह एक बहुत ही दिलचस्प सवाल है जो मुझे लगता है। जन्मदिन का उदाहरण लें, यह केवल मानव में वास्तव में समझ में आता है, मैं एक ही स्थान पर रह रहा हूं और हर कोई एक ही समय पर उठता है, जिस तरह से। जैसे ही आपको इसे गणितीय रूप से व्यक्त करने की आवश्यकता होती है यह बहुत जटिल हो जाता है। सामान के साथ काम की तरह शिफ्ट शुरू / अंत समय आदि वे 'बार' वे 'समय के दिन जिसमें आप काम कर रहे हैं' में हैं
इवान

3
NodaTime (दिनांक और समय के लिए एक C # लाइब्रेरी) में दिनांक का एक प्रकार है।
कोडइन्चोस

5
अपना समय UTC, कोई दिनांक समस्याएँ, कोई समय क्षेत्र समस्याओं के रूप में संग्रहीत न करें।
लोरेन Pechtel

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

5
@MichaelBlackburn मैं गंभीर हूं। आपकी व्याख्या वास्तव में स्वयं के डेटा प्रकार की स्थिति के बारे में लगती है, जो व्यावसायिक नियम (केवल तिथि, उदाहरण के लिए, आप इसे "डेटाइम" के रूप में आंतरिक रूप से दोपहर के समय के समय के साथ स्टोर कर सकते हैं), लेकिन उसके बाद केवल उन भागों को उजागर करें जिन्हें आप चाहते हैं (महीने में) दिन आदि वर्ष / कोई वर्ष)।
ब्रैंडन

जवाबों:


15

सबसे पहले, आइए एक चीज को बाहर निकालें : जन्मदिन एक चीज है, जन्म तारीखें दूसरी हैं। एक जन्मदिन एक विदेशी डेटा प्रकार है क्योंकि इसमें न केवल घंटे, मिनट आदि के घटकों का अभाव है, बल्कि इसमें वर्ष घटक का भी अभाव है। यदि आप वास्तव में जन्मदिन से निपटना चाहते हैं, तो मैं आपके स्वयं के डेटा प्रकार का आविष्कार करने की सलाह दूंगा, जिसमें एक महीने की संख्या और एक दिन की संख्या के अलावा कुछ भी नहीं है, और किसी भी अंतर्निहित तिथि-प्रकार डेटा प्रकार से संबंधित नहीं है।

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

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

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

उदाहरण के लिए, DateTimeMicrosoft डॉटनेट के डेटा प्रकार में, समय इकाई 100 नैनोसेकंड है, और समय की उत्पत्ति 12:00 मध्यरात्रि, 1 जनवरी, 0001 CE है

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

तो, माप की वास्तविक प्रकृति के साथ माप के मानव-पठनीय प्रतिनिधित्व को भ्रमित न करें। काफी बार एक माप को साकार करने के लिए आदर्श विधि, जो माप की प्रकृति से सबसे अधिक निकटता से मेल खाती है, उस माप के मानव-पठनीय प्रतिनिधित्व से बहुत अलग है।

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

जन्म के समय के साथ आपकी समस्या यह है कि आपके पास एक अभेद्य समय समन्वय है: व्यक्ति निश्चित रूप से समय में एक विशिष्ट क्षण में पैदा हुआ था, लेकिन घंटे और मिनट या तो अस्पताल द्वारा रिकॉर्ड नहीं किए गए थे, या हम नहीं करते हैं उनकी परवाह करो। तो, जो वास्तव में हो रहा है , वह यह है कि आपकी जन्म-तिथि के समय के समन्वय में त्रुटि, सहिष्णुता या अनिश्चितता का एक मार्जिन है यदि आप चाहें, और इसे इस तरह से व्यवहार करना सबसे अच्छा है: इसे बिल्कुल बीच में डालें दिन, और एक निहित +12 -12 घंटे की अनिश्चितता पर विचार करें। और यह ठीक समाधान है कि आप सहज रूप से पहुंचे हैं।


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

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

4
-1: समय के सभी उपयोग समय में एक पल का प्रतिनिधित्व नहीं करते हैं। एक जन्मदिन एक अलग विचार है, जो ग्रेगोरियन कैलेंडर में एक महीने और दिन द्वारा दर्शाया गया है। यह पूछने के लिए समझ में आता है "क्या आज केविन का जन्मदिन है?" उत्तर स्थान-निर्भर है। अगर मैं सिडनी में हूं तो यह मेरा जन्मदिन हो सकता है, लेकिन अगर मैं इसके बजाय होनोलूलू में होता, तो यह कुछ घंटों के लिए नहीं होता।
केविन क्लाइन

6
@ मायकेनकीस परिणाम माइक्रोएप्स होगा, बकवास नहीं। अधिक महत्वपूर्ण: जब आप एक दूसरे या मिलीसेकंड के बजाय एक तारीख का उपयोग करते हैं, तो आप आम तौर पर पूरे दिन के बारे में बात कर रहे होते हैं - एक विशेष अवधि के बजाय एक समय अवधि - और संदर्भ के आधार पर यह एक दोहराई जाने वाली घटना हो सकती है।
कालेब

4
ओपी जन्मदिन के बारे में बात कर रहे थे, जो वास्तव में java.util द्वारा प्रस्तुत किए गए हैं। मंथडे। जन्मदिन एक माप नहीं है, यह एक दिन की मानवीय धारणा है जो वार्षिक रूप से दोहराती है। समय के बहुत से मानवीय विचार हैं जो समय में एक भी बिंदु द्वारा प्रतिनिधित्व नहीं करते हैं।
केविन क्लाइन

9

संदर्भ के आधार पर दिनांक और समय कई अलग-अलग चीजें हैं, और आपको सभी उपयोग मामलों को कवर करने के लिए कई अलग-अलग प्रकारों की आवश्यकता होती है।

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

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

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

अब आप पूछते हैं कि भाषाओं LocalDate में बिल्ट-इन जैसा कुछ क्यों नहीं है । अच्छी तरह से पहले, कुछ भाषाओं जैसे कि SQL और Visual Basic में समय के बिना एक तिथि प्रकार होता है। और जावा ने LocalDateहाल के संस्करण में एक भी जोड़ा है । लेकिन जैसे अन्य प्लेटफॉर्म .Net नहीं करते हैं। केवल भाषा डिजाइनर वास्तव में उत्तर दे सकते हैं कि यह मानक पुस्तकालय में शामिल क्यों नहीं है, लेकिन मेरा अनुमान है कि "तात्कालिक समय" वैचारिक रूप से सरल और सार्वभौमिक रूप से उपयोगी है, जबकि अन्य समय की अवधारणाएं केवल विशिष्ट एप्लिकेशन डोमेन (जैसे कैलेंडर) के लिए उपयोगी हैं। ।)। तो यह समझ में आता है कि एप्लिकेशन डेवलपर को अधिक जटिल उपयोग के मामलों को संभालने के लिए कस्टम प्रकार लिखने की अनुमति देता है, या इसे तीसरे पक्ष के पुस्तकालय (जैसे जोडा-समय) द्वारा नियंत्रित किया जाता है।


5

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

यह शायद इसलिए है क्योंकि कैलेंडर जटिल हैं और इतने अलग-अलग तरीकों से उपयोग किए जाते हैं कि कोई भी एक वर्ग का पता लगाने में सक्षम नहीं हुआ है जो कि अभी तक सामान्य है जो कई क्षेत्रों में उपयोगी है।

प्रोग्रामिंग भाषाओं में आमतौर पर पाई जाने वाली तारीख का उपयोग कंप्यूटर सिस्टम में लेनदेन को सही तरीके से करने के लिए किया जा सकता है। अन्य उपयोग-मामलों में एक कस्टम लाइब्रेरी की आवश्यकता होती है।

यहां कैलेंडर के बारे में तथ्यों की एक छोटी सूची दी गई है, उनकी जटिलता का प्रदर्शन - उनमें से अधिकांश ऐतिहासिक हैं, इसलिए यदि आप 1.1.1970 के बाद की तारीखों पर अपना ध्यान सीमित कर रहे हैं, तो आप इससे प्रभावित नहीं होंगे। हालाँकि यदि आपके आवेदन को 19 वीं शताब्दी के अंत से पहले की तारीखों के साथ काम करने की आवश्यकता है, तो ये तथ्य मायने रखेंगे। संभावित उपयोग-मामले सभी प्रकार के ऐतिहासिक डेटाबेस (किताबें, वंशावली) हैं, लेकिन बड़ी कंपनियों या संगठन की संपत्ति आज भी गतिविधि में हैं।

इन सभी तथ्यों को जूलियन साइनोल्स द्वारा लिखित OCaml के लिए कैलेंडर लाइब्रेरी में पाए गए उत्कृष्ट FAQ से उद्धृत किया गया है ।

  1. जूलियस कैलेंडर को 45 ईसा पूर्व में जूलियस सीजर ने पेश किया था। यह 1500 के दशक तक आम उपयोग में था, जब देशों ने ग्रेगोरियन कैलेंडर (धारा 2.2) को बदलना शुरू कर दिया था। हालांकि, कुछ देशों (उदाहरण के लिए, ग्रीस और रूस) ने इसे 1900 के दशक में इस्तेमाल किया, और रूस में रूढ़िवादी चर्च अभी भी इसका उपयोग करते हैं, जैसा कि कुछ अन्य रूढ़िवादी चर्च करते हैं।

  2. जूलियन से ग्रेगोरियन कैलेंडर में स्विच करना समान रूप से नहीं हुआ, और परिवर्तन के वर्ष के आधार पर, 10 से 13 दिन गिरा दिए गए हैं। उदाहरण के लिए फ्रांस में 9 दिसंबर 1582 और उसके बाद 20 दिसंबर 1582 और यूनान में 9 मार्च 1924 और उसके बाद 23 मार्च 1924 को आया।

  3. यहां तक ​​कि आधुनिक युग में, कई अलग-अलग कैलेंडर का उपयोग किया जाता है (ग्रेगोरियन, रूढ़िवादी, इस्लामी और चीनी) कुछ उद्धृत करने के लिए, जो सभी वर्षों और वर्षगाँठों या तिथि धार्मिक समारोहों की गणना करने के लिए विभिन्न तरीकों का उपयोग करते हैं।

अब आप सामान्य व्यवसाय संचालन के लिए उपयोगी ऑपरेशंस के साथ बंडल किए गए दिनांक प्रकार की आशा करते हैं। मुझे लगता है कि सामान्य व्यवसाय संचालन जैसी कोई चीज नहीं है। उदाहरण के लिए, वित्त जगत में, हमें गणना करने की आवश्यकता है:

  1. वर्ष अंश (जैसे "6 महीने" "0.5" से मेल खाती है), जो कि किसी दिए गए पद के लिए ऋण पर वास्तविक ब्याज की गणना करने के लिए ब्याज दर के साथ संयोजन में उपयोग किया जाता है। इन अंशों की गणना करने के लिए 6 से 10 व्यंजनों हैं, प्रत्येक तरीके से वे एक लीप वर्ष की लंबाई को संभालते हैं, फरवरी के अंतिम दिन और एक महीने की अवधि के संबंध में अवधि की स्थिति।

  2. तिथि रोलिंग, जब वर्षगांठ की गणना करते हैं, तो हम एक व्यावसायिक कैलेंडर और एक नियम (6 से अधिक विभिन्न नियमों के एक सेट से उठाया गया) का उपयोग करते हुए एक सालगिरह को छुट्टी के दिन से एक व्यावसायिक दिन में स्थानांतरित करते हैं।

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

क्या किसी एप्लिकेशन क्लास को परिभाषित करने में शेड्यूलिंग एप्लिकेशन के रूप में स्पष्ट रूप से अभिप्रेरित मूल्य है, या सबसे अच्छा तरीका "दोपहर से दोपहर तक" सेट है? दिनांक समय का उपयोग करने और दोपहर को समय घटक सेट करने में क्या समस्याएं हो सकती हैं? क्या इस तरह के दृष्टिकोण में टाइमजोन शिफ्टिंग का हिसाब किया जा सकता है? मैंने MomentJS का उपयोग किया है, लेकिन मुझे लगता है कि यह सिर्फ एक बेहतर डेट क्लास है।

यदि आपको एकल कैलेंडर दिन का ट्रैक रखने की आवश्यकता है, तो सबसे अच्छा तरीका संभवतः उस कैलेंडर दिन के जूलियन दिन का प्रतिनिधित्व करने वाले बड़े पूर्णांक का उपयोग करना है। जूलियन दिन से कैलेंडर दिन के लिए आगे और पीछे बदलने के लिए एल्गोरिदम - वर्ष, महीने और कैलेंडर के साथ वर्णित - व्यापक रूप से जाना जाता है और अच्छी तरह से परीक्षण किया जाता है, ताकि आप उन्हें आसानी से अपने आवेदन में लागू कर सकें - और यह पता लगाएं कि जो भी नियम आपके अनुसार है कुछ 29 वें Februray पर होने वाली घटना की वर्षगांठ की गणना करने के लिए मामला।


2

मुझे लगता है कि ऊपर दिए गए मेरे उत्तर में माइक नकिस यह बताने से बेहतर काम करता है कि मैं यह बता सकता हूं कि सामान्य रूप से समय को कैसे मापा जाता है और किसी भी अन्य संचार, उस समय के समन्वय की स्थिति या दृढ़ता केवल एक समन्वित प्रतिनिधित्व है।

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

आप देख सकते हैं कि यह आसान सा लगने वाला प्रश्न वास्तव में कितना जटिल हो सकता है।

मुझे पता है कि आप जिस दर्द को महसूस कर रहे हैं, वह एक अनुभव के डेवलपर्स के लिए एक मुलाक़ात शेड्यूलिंग एप्लिकेशन में सभी बग्स को ठीक करने वाले एक बिंदु पर था जो अनुभवहीन डेवलपर्स द्वारा लिखा गया था। पूरी बात को खंगालना पड़ा।

समय वास्तव में एक समन्वय है, लेकिन एक मात्र तारीख के अलावा, अन्य समय संवेदनशील डेटा पर विचार करें जिसकी आवश्यकता हो सकती है जैसे:

अवधि: मिलीसेकंड की एक अवधि जो कि हो सकती है जो किसी विशिष्ट समय निर्देशांक के साथ लंबाई या समय बीतने का संकेत देती है। एक उपयोग मामला हो सकता है,

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

अंतराल: दो विशिष्ट समय निर्देशांक के बीच समय की सीमा। एक उपयोग मामला जहां आप एक अंतराल पर विचार करना चाह सकते हैं।

एक उपयोगकर्ता के रूप में, मुझे समय के एक निश्चित अंतराल के भीतर पूरी तरह से निहित हर दिन को देखने की जरूरत है।

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

तो निष्कर्ष में, इस जानकारी के सभी अनिवार्य रूप से निम्नलिखित डिजाइन विचार की ओर जाता है:

  • समय में विशिष्ट बिंदुओं या श्रेणियों को यूटीसी या कुछ डेटाटाइप में रखा जाना चाहिए जिसमें आसानी से यूटीसी पर वापस सारित होने के लिए पर्याप्त जानकारी होना आवश्यक है।
  • एप्लिकेशन तर्क को UTC को प्रारूपित करने के लिए लिखा जाना चाहिए या UTC की एक श्रृंखला एक प्रतिनिधित्वात्मक डेटा स्थिति में समन्वयित करती है जो अंतिम उपयोगकर्ता के लिए अधिक सुपाच्य है।
  • महत्वपूर्ण अवधियों को मिलीसेकंड में बनाए रखा जाना चाहिए
  • समय के संबंध में किसी भी डेटा के प्रदर्शन पर स्थानीय विशिष्ट या अंतिम उपयोगकर्ता वरीयताएँ अतिरिक्त डेटा के रूप में बनी रहेंगी और प्रदर्शन विकल्प की तरह व्यवहार की जानी चाहिए। (उदा। कियोस्क ए, केंद्रीय समय क्षेत्र, सैन्य समय प्रारूप, या उपयोगकर्ता बी प्राथमिकताएं, तेल अवीव में मानक समय (जीएमटी + GM: ००) समयक्षेत्र, आदि ...)
  • एफपी नंबर से बचें

1
इसमें से कोई भी "अपरिहार्य" नहीं है। यह कई अनुप्रयोगों के लिए सामान्य हो सकता है, लेकिन लार्ज हैड्रोन कोलाइडर नैनोसेकंड पैमाने पर घटनाओं से संबंधित है। सिस्टम बार माइक्रोसेकंड में चला गया है क्योंकि मिलीसेकंड में पर्याप्त सटीकता नहीं है। कैलेंडर ऐप्स को एक तारीख की अवधारणा की आवश्यकता होती है जो एक स्थानीय कैलेंडर दिन पर होती है चाहे आप उसी समय क्षेत्र में हों या नहीं, जब आपने ईवेंट बनाया था।
एलन शुतको

1
@AlanShutko और हाँ यह कि "अतिरिक्त डेटा" की आवश्यकता है जो स्थानीय समय क्षेत्र और दिनों जैसी चीजें हैं, और किसी भी अन्य महत्वपूर्ण डेटा को कैप्चर किया जाना चाहिए। ये सभी केवल समय के एक बिंदु पर अमूर्त हैं, भले ही समय में बिंदु आपके एल्गोरिथ्म के लिए महत्वपूर्ण नहीं है। जहाँ तक नैनोसेकंड और यहां तक ​​कि माइक्रोसेकंड पैमाने पर है, मेरा जवाब वेब और एलओबी प्रकार के सॉफ्टवेयर की ओर अधिक है। मुझे संदेह है कि पसंद की LHC भाषा C # या जावास्क्रिप्ट है।
maple_shaft

1
मिलिसेकंड दोहराए जाने वाली शारीरिक प्रक्रियाओं के लिए महान हैं। मानव गतिविधि के लिए, कभी-कभी उपयुक्त इकाई नाममात्र दिन होती है, उदाहरण के लिए यदि दिन के अंत में इसे तीन दिन बाद गंतव्य पर उपयोग के लिए उपलब्ध किया जाएगा।
केविन क्लाइन

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

माइक, मुझे लगता है कि उसकी चिंता एफपी गणित के साथ अनिवार्य रूप से गोलाई में है क्योंकि यह दशमलव से द्विआधारी मूल्यों में परिवर्तित हो रहा है। उदाहरण के लिए, बाइनरी एफपी नंबर के रूप में व्यक्त किए जाने पर 0.3 एक दोहराए जाने वाला दशमलव है, और इसलिए इसका सटीक प्रतिनिधित्व नहीं किया जा सकता है। ऐसा नहीं है कि आप क्षमता को याद कर रहे हैं, लेकिन आप सटीकता को याद कर रहे हैं।
माइकल ब्लैकबर्न

2

संक्षेप में, क्योंकि अधिकांश कंप्यूटर आधारित समय प्रकार समय और समय क्षेत्र समस्या को ठीक से संभालने पर केंद्रित होते हैं।

2 किनारे मामले हैं जो सामान्य दृष्टिकोण से अच्छी तरह से नहीं परोसे जाते हैं। उस समय में एक बिंदु सेट करना जो स्थानीय समय का उपयोग करते हुए दिन के उजाले की बचत परिवर्तन के दूसरी तरफ है, जो तब UTC में निचली अमूर्त परत द्वारा परिवर्तित हो जाता है, और फिर आपकी मुलाकात के लिए आपको 1 घंटा पहले / देर से बनाता है।

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

मध्याह्न के समय को निर्धारित करने के रूप में प्रश्न में सुझाव, UTC काम करेगा, ALMOST हर जगह। UTC ऑफ़सेट्स -12 से +14 तक होते हैं, इसलिए प्रशांत में कुछ स्थान हैं जहाँ यह दृष्टिकोण विफल हो जाएगा। मैं इन डेटा प्रकारों को स्ट्रिंग्स के रूप में मानता हूं, एक yyymmdd प्रारूप में, और अगर मुझे दो तिथियों के बीच तुलना गणना करनी है, तो यह सुरक्षित रूप से एक स्ट्रिंग तुलना के रूप में किया जा सकता है। डेल्टा तुलना करते समय (जैसे कि तारीख और अब के बीच, या जब तक वे एक्स तक पहुंचते हैं), आपको यह सुनिश्चित करने की आवश्यकता है कि सभी तिथियां एक ही यूटीसी ऑफसेट में बनाई गई हैं, और फिर काम करने के लिए मानक समय के कार्यों का उपयोग कर सकती हैं।


3
" मैं एक YYYYMMDD प्रारूप में, तार के रूप में इन डेटा प्रकार के इलाज के लिए जाते हैं, और अगर मैं दो तिथियों के बीच तुलना गणना करने के लिए है, यह सुरक्षित रूप से एक स्ट्रिंग तुलना के रूप में किया जा सकता है। एक तरह" यह यकीन है कि लगता है Dateडेटाप्रकार, बस में किया जा रहा एString
रॉस पैटरसन

जैसा कि आप कहते हैं, इसकी तारीख का एक स्ट्रिंग निरूपण, और मूल पोस्टर के विपरीत, तिथि UTC + 13 समयक्षेत्र में होने से परिवर्तित नहीं होती है।
माइकल शॉ

2

एक सच्चा "दिनांक-केवल" डेटा प्रकार क्यों नहीं है?

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

किसी डेटटाइम मान के साथ दिनांक निर्दिष्ट करने की कोशिश करना एक क्षेत्र को निर्दिष्ट करने के लिए एक बिंदु का उपयोग करने की कोशिश करना है।आप एक कन्वेंशन का उपयोग करके उस काम को कर सकते हैं, जैसे "यह बिंदु एक सर्कल के केंद्र को 100 मीटर त्रिज्या के साथ दर्शाता है," लेकिन वहां बहुत सारी समस्याएं हैं: हर किसी को एक ही सम्मेलन का उपयोग करने की आवश्यकता है, आपको एक गुच्छा लिखने की आवश्यकता है गलत प्रकार से कम दर्दनाक के साथ काम करने के लिए कोड का समर्थन करना, और इसकी बहुत गारंटी है कि कुछ बिंदु पर आपको एक ऐसा क्षेत्र निर्दिष्ट करना होगा जो पारंपरिक क्षेत्र से बड़ा या छोटा हो। इसलिए यह तिथियों के साथ है: आप तारीखों को निर्दिष्ट करने के लिए पारंपरिक समय के रूप में 'दोपहर' का उपयोग कर सकते हैं, लेकिन फिर आप समय क्षेत्रों में पहुंच जाते हैं क्योंकि लोग UTC के बजाय अपने स्थानीय समय में तिथियों को निर्दिष्ट करने की अपेक्षा करते हैं। और यहां तक ​​कि अगर आप किसी तिथि को निर्दिष्ट करने के लिए डेटटाइम का उपयोग करने के लिए संतोषजनक तरीके से आते हैं, तो आपको यह जानने के लिए अधिक जानकारी की आवश्यकता होगी कि क्या यह एक पूर्ण तिथि है या एक रिश्तेदार है: क्या यह 4 जुलाई है? 1776 या हर 4 जुलाई? यदि आप किसी अन्य अवधि का उपयोग करके दोहराना चाहते हैं तो क्या होगा? और कैलेंडर में सभी प्रकार के पागल मुद्दे हैं: कुछ महीने दूसरों की तुलना में लंबे होते हैं, कुछ साल दूसरों की तुलना में लंबे होते हैं, कुछ दिन दूसरों की तुलना में अधिक लंबे होते हैं, और कुछ कैलेंडर में अंतराल होते हैं। आप इन समस्याओं को केवल पूरे दिनों के लिए हल नहीं करना चाहेंगे, क्योंकि छोटी अवधि के लिए एक ही मुद्दे सामने आते हैं: आप शायद ऐसा कोड लिखने में सक्षम हों जो "हर 4 घंटे में 1 गोली ले" आसानी से "के रूप में" समूह हर तीसरे शुक्रवार को मिलता है। "

इसलिए, तिथियों के साथ काम करने में बहुत सारी जटिलताएँ शामिल हैं। यह एक प्रकार प्रदान करने के लिए अपेक्षाकृत (कोई भी इरादा नहीं है) एक प्रकार प्रदान करना आसान है जो समय में एक बिंदु को निर्दिष्ट करता है और इसके साथ काम करता है जैसा कि आप एक नंबर देंगे, लेकिन एक प्रकार प्रदान करना बेहद मुश्किल है जो उन सभी तरीकों को संबोधित करता है जो दिनांक उपयोग किए जाते हैं।

जैसा कि अन्य लोगों ने बताया है कि ऐसी भाषाएं और पुस्तकालय हैं जो तारीखों के लिए अच्छा समर्थन प्रदान करते हैं, और यह अक्सर उन्हें उपयोग करने के लिए एक अच्छा विचार है, यह देखते हुए कि तारीख से संबंधित कोड बिल्कुल सही प्राप्त करना काफी मुश्किल है।


2
"एक प्रकार प्रदान करना मुश्किल है जो उन सभी तरीकों को संबोधित करता है जो दिनांक उपयोग किए जाते हैं।" सच है, यही कारण है कि यह एक भयानक विचार है कि यह सब करने के लिए एक ही प्रकार प्रदान करने का प्रयास किया जाए। पहले जावा रिलीज ने केवल java.util प्रदान किया। परिणाम और भयानक था। फिर उन्होंने एक जटिल java.util.Calendar पदानुक्रम जोड़ा और यह बहुत बेहतर नहीं निकला।
केविन क्लाइन

1
@kevincline पूरी तरह सहमत हैं। ओपी ने एक भाषा निर्दिष्ट नहीं की, इसलिए मैं सामान्यता का लक्ष्य बना रहा था।
कालेब

" उन्हीं कारणों से, मुझे लगता है, कि डेटटाइम मान आमतौर पर यूटीसी में निर्दिष्ट होते हैं " ... ओह, क्या यह सच था। यह 2015 है, और लेखक के होम टाइमज़ोन का उपयोग करते हुए अभी भी बहुत सारे कोड लिखे जा रहे हैं :-(
रॉस पैटरसन

1
मैं वास्तव में सोच रहा था कि आसपास की तारीखों में आम तौर पर स्वीकृत सम्मेलन क्यों नहीं है। आपका "किसी क्षेत्र का प्रतिनिधित्व करने के लिए एक बिंदु का उपयोग करना" पूरी तरह से मेरी हताशा को बढ़ाता है।
माइकल ब्लैकबर्न

2

एक सच्चा "दिनांक-केवल" डेटा प्रकार क्यों नहीं है?

विभिन्न पुस्तकालयों में विभिन्न भाषाओं के लिए कई ऐसे प्रकार हैं। आपकी वर्तमान भाषा के लिए लगभग निश्चित रूप से एक है। जावा उपयोग पैकेज में समय की गणना के लिए एक भयानक एपीआई था, लेकिन java.time पैकेज की शुरूआत ने जीवन को बहुत बेहतर बना दिया है। Java.time.LocalDate देखें, जिसमें साल-महीने के दिन का मान हो, या java.time.monthDay हो, जिसमें केवल एक महीने और दिन की संख्या हो।


1

कैलेंड्रिकल हेरफेर कंप्यूटिंग के सबसे खराब समझे जाने वाले पहलुओं में से एक है। पूरी किताबें विषय पर लिखी गई हैं। @ मिचेलब्लैकबर्न डेट-डेटेटाइप के लिए पूछने में बिल्कुल सही है, वह जो समयरेखा पर एक बिंदु पर हल नहीं करता है, फिर से व्याख्या के अधीन है। ऐतिहासिक रूप से, तिथि के अर्थ के बारे में वैध विवाद रहे हैं। किसी को ग्रेगोरियन कैलेंडर को अपनाने से ज्यादा नहीं देखना होगा कि यह कितना जटिल हो सकता है। इसके अलावा, साल हमेशा 1 जनवरी से शुरू नहीं हुए, यहां तक ​​कि पश्चिमी यूरोप और उसके उपनिवेशों में ( जैसे , ब्रिटेन और ब्रिटिश अमेरिका ने 25 मार्च को वर्ष शुरू किया)।


1
यह सही है। मेरे जवाब में जो कैलेंडर FAQ मैं उद्धृत करता हूं, वह क्लैंडर जोड़तोड़ की जटिलताओं और सूक्ष्मताओं की खोज करने के लिए एक उत्कृष्ट संसाधन है
माइकल ले

-2

के जवाब में:

खैर, मैं ईमानदारी से जानना चाहता हूं कि लगभग हर भाषा में इसके लिए केवल एक डेटा प्रकार क्यों है।

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

date = new DateTime(year, month, day, 0, 0, 0);

यदि आप चाहते हैं कि आप खुद को डेटटाइम बढ़ा सकते हैं:

public class Date extends DateTime {
    ...
    public Date(int year, int month, int day) {
        this(year, month, day, 0, 0, 0);
    }
}

नोट: मैं जानबूझकर डिफ़ॉल्ट समय और समय क्षेत्र की अनदेखी कर रहा हूं। यह वास्तव में कोई फर्क नहीं पड़ता कि आप उन्हें क्या सेट करते हैं, जब तक कि वे सभी के लिए समान न हों Date। आप यूटीसी के लिए मामला बना सकते हैं। आप अपने सर्वर में बैठने वाले टाइमज़ोन का उपयोग करने के लिए एक मामला बना सकते हैं - किसी भी तरह से मुझे नहीं लगता कि यह एक महत्वपूर्ण मूल्य का प्रतिनिधित्व करने के लिए महत्वपूर्ण है Date। डिफ़ॉल्ट समय के साथ भी - आप इसे 0 कर सकते हैं, आप इसे दोपहर कर सकते हैं। इससे कोई फर्क नहीं पड़ता। अगर फेसबुक मुझे 00:01 पर जन्मदिन की सूचना भेजता है, लेकिन मैं 23:59 बजे पैदा हुआ था, तो मुझे वास्तव में परवाह नहीं है, और मैं नाराज नहीं होऊंगा कि वे 12 घंटे से अधिक थे।

ऊपर जावा में है, लेकिन एक DateTimeऔर विरासत के साथ किसी भी भाषा में इसी तरह काम करेगा । जावा के पास वास्तव में इसे हल करने के कई तरीके हैं, और ऊपर पदावनत है (वे चाहते हैं कि आप Calendarअभी उपयोग करें )। लेकिन जैसे-जैसे दूसरों को टिप्पणी में तैनात, कुछ भाषाओं वास्तव में है एक प्रदान Dateवर्ग सिर्फ इस कारण के लिए, शायद।

सभी संभावना में, हर Dateकार्यान्वयन शायद भाषा के लिए केवल एक आवरण है DateTimeऔर यह समय को शून्य कर देता है। अन्यथा आपको दो तिथियों / तिथियों के बीच की दिनों की संख्या, या क्या दो Dates समान हैं (क्या फ़रवरी 29 और Mar 1 के बारे में?) जैसी समस्याओं को हल करने के लिए डुप्लिकेट कोड की आवश्यकता होगी । उन प्रकार की चीजों को आमतौर पर DateTimeकक्षा में हल किया जाता है । यह एक के लिए एक ही कोड का पुन: उपयोग करने के लिए समझ में आता है Date


4
-1: अगर आप सिर्फ साल + महीना + दिन चाहते हैं तो लोकलडेट का उपयोग करें। उस उद्देश्य के लिए DateTime का उपयोग करने से कीड़े पैदा होंगे जब कुछ अन्य प्रोग्रामर DateTime को देखते हैं और मानते हैं कि यह समय में एक क्षण का प्रतिनिधित्व करता है।
केविन क्लाइन

@kevincline मुझे नहीं लगा कि यह आवश्यक है क्योंकि यह प्रश्न भाषा-अज्ञेयवादी है। मुझे यह भी लगता है कि यह स्पष्ट है कि "डिप्रेकेटेड" लेबल वाले कोड का उपयोग करना एक उपयोग-में-आपका-जोखिम परिदृश्य है। इससे भी महत्वपूर्ण बात यह है कि मैंने केवल उसी चीज़ का एक उदाहरण के रूप में उपयोग किया है जिसमें आप एक ऐसे परिदृश्य में कर सकते हैं जहाँ भाषा की कोई श्रेणी LocalDateया Dateप्रकार नहीं है और आपको 'रोल-योर-ओन' है।
शेज

1
लेकिन स्पष्ट नियमों और समय के बारे में व्यावसायिक नियमों से संबंधित कोड के लिए "यह आवश्यक है" (भौतिक समय के विपरीत)। यदि पुस्तकालय नाममात्र समय के लिए प्रकार प्रदान नहीं करता है, तो प्रोग्रामर के लिए उन्हें आविष्कार करना आवश्यक होगा, और ऐसा करने का तरीका "दिनांक समय" से शुरू नहीं होता है।
केविन क्लाइन

@kevincline मैं यह नहीं देखता कि कोड किसी भी कम स्पष्ट या संक्षिप्त कैसे होगा। एक प्रोग्रामर के दृष्टिकोण से new Date(2000, 1, 1);और के बीच क्या अंतर है new Date(2000, 1, 1);? क्या आप बता सकते हैं कि किसके पास खाली घंटे, मिनट और सेकंड हैं? यदि आप अतिरिक्त कार्यों को दिखाने के बारे में चिंतित हैं (जैसे सेटमिनुट्स ()), तो आप इसे से विरासत में लेने के बजाय Dateरैप होने के मार्ग पर जा सकते हैं DateTime, और फिर आप केवल सेटयियर, सेटमार्ट, सेटडे, आदि को उजागर कर सकते हैं और यह निश्चित रूप से बहुत कम है। पुस्तकालय की उस समय-सीमा की तुलना में सही है जिसका आप उपयोग कर रहे हैं।
शाज़

मेरी पृष्ठभूमि काफी हद तक C # है, जिसमें लोकलडेट के अनुरूप निर्माण नहीं है। हम सिर्फ DateTime और अस्पष्ट रूप से, स्पष्ट रूप से।
माइकल ब्लैकबर्न
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.