क्या कोई तकनीकी कारण है, प्रोग्रामिंग में, डिफ़ॉल्ट तिथि प्रारूप YYYYMMDD है और कुछ और नहीं?


118

क्या कोई इंजीनियरिंग कारण है कि ऐसा क्यों है? मैं एक आरडीबीएमएस के मामले में सोच रहा था कि इसे प्रदर्शन के साथ कुछ करना था, क्योंकि "YEAR" एक "महीने" से अधिक विशिष्ट है, उदाहरण के लिए: आपके पास केवल एक वर्ष 2000 है, लेकिन हर साल "जनवरी" है, जो पहले वर्ष से किसी चीज़ को छानने / छांटने में आसान / तेज़ होगा, और इसीलिए वर्ष पहले आता है।

लेकिन मुझे नहीं पता कि क्या यह वास्तव में समझ में आता है ... क्या इसका कोई कारण है?


14
@ हम इसे पसंद नहीं कर सकते हैं, लेकिन अक्सर उन्हें तार के रूप में संग्रहीत किया जाता है।
होन्ज़ा ब्रेबेक

14
@candied_orange यह अजीब होगा, खासकर तारीखों के मामले में।
Glglgl


19
एक साइड नोट के रूप में, यह प्रारूप विदेशी नहीं है । उदाहरण के लिए, हंगेरियन भाषा में (और शायद कुछ अन्य लोग भी) YYYY। एम.एम.। डीडी। डिफ़ॉल्ट लिखित दिनांक स्वरूप है, और कंप्यूटर से पहले एक लंबा समय रहा है।
नेस्टाइन

31
प्रोग्रामिंग में, डिफ़ॉल्ट तिथि प्रारूप "YYYYMMDD" है? यह अच्छा होगा यदि यह सच था, लेकिन यह निश्चित रूप से हर जगह नहीं है। RFC 822 और RFC 850 के साथ-साथ ANSI C का asctimeअभी भी बहुत सारे स्थानों पर व्यापक रूप से उपयोग किया जाता है। यह अच्छा है कि आरएफसी 3339 और आईएसओ 8601 धीरे-धीरे पुराने प्रारूपों को विस्थापित कर रहे हैं, और वे निश्चित रूप से आगे जाने के लिए उपयोग किए जाने वाले हैं। आम तौर पर, मैं कहूंगा कि आईएसओ 8601 मूल रूप (विभाजक पात्रों के बिना सादा YYYYMMDD) वास्तव में कुछ अन्य रूपों की तुलना में कम सामान्य है, जैसे YYYY-MM-DD।
डैनियल प्राइडेन

जवाबों:


386

इस तरह, डिफ़ॉल्ट सॉर्टिंग नियमों (यानी लेक्सोग्राफिक सॉर्टिंग ) का उपयोग करके तारीखों को आसानी से तार के रूप में हल किया जा सकता है ।

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

वास्तव में यह आईएसओ 8601 द्वारा परिभाषित तारीख स्वरूपों में से एक है । यह मानक एक दिनांक-और-समय प्रारूप को भी परिभाषित करता है 2015-03-27T15:26:40Z, जो तार के रूप में भी क्रमबद्ध है।

हालांकि, YYYYMMDD को आसानी से संभव बनाने का एक अतिरिक्त लाभ है (कोई सब्सट्रेट या चरित्र प्रतिस्थापन शामिल नहीं है) स्ट्रिंग को पूर्णांक के रूप में पार्स करता है, और अभी भी पूर्णांक पर डिफ़ॉल्ट क्रम का उपयोग करता है।


90
@lucaswxp: यदि आप एक विशिष्ट स्कीमा के बाद तार के लिए एक विशेष-केस तुलना लिखते हैं, तो आप निश्चित रूप से इसे अपनी इच्छानुसार बारोक बना सकते हैं। यहां बात यह है कि स्कीमा को इस तरह से डिज़ाइन किया गया है कि लेक्सिकल ऑर्डर (साथ ही लेक्सिकल नंबर-अवेयर ऑर्डर) भी लॉजिकल ऑर्डर है, इसलिए कस्टमाइज़ करने की कोई ज़रूरत नहीं है।
डेडुप्लिकेटर

19
@lucaswxp आपकी दिनांक स्ट्रिंग स्मृति में नहीं हो सकती है। व्यावहारिक उदाहरण: आपके पास एक सीएसवी फ़ाइल है जो पहले से ही प्रति वर्ष आईएसओ तिथि और लाखों + पंक्तियों द्वारा क्रमबद्ध है। और आप निश्चित तिथियों के बीच केवल पंक्तियों को वापस करना चाहते हैं। आप फ़ाइल लाइन को पंक्ति द्वारा पंक्ति (पंक्ति द्वारा पंक्ति) पढ़ सकते हैं जब तक आप अपनी पहली तारीख तक नहीं पहुंचते, तब तक पंक्तियों को स्मृति में लोड करें जब तक आप अपनी अंतिम तिथि तक नहीं पहुंच जाते। आप बाकी फ़ाइल को छोड़ सकते हैं। लेकिन अगर आप तारीख को किसी अन्य प्रारूप के रूप में सहेजते हैं, या केवल वर्ष के अनुसार क्रमबद्ध करते हैं, तो आपको फ़ाइल बंद करने से पहले पूरे वर्ष के रिकॉर्ड को गर्त में पढ़ना होगा।
टॉम ए विबेटो सेप

48
ध्यान दें कि डैश, आईएसओ 8601 में वैकल्पिक हैं तो YYYYMMDD है आईएसओ 8601.
मार्टिन बा

32
@Benoit Y10K समस्या को हल करने के लिए एक प्रस्ताव पहले ही बनाया जा चुका है। यदि हम अभी भी उसी युग का उपयोग कर रहे हैं, तो हम YYKK तक AYYYYYMMDD पर जाएंगे, जो BYYYYYYMMDD, CYYYYYYMMDD, DYYYYYYYMMDD, EYYYYYYYYYMMDD होंगे। यह प्रमुख अल्फा उपसर्ग सही क्रम क्रम का आश्वासन देता है (बशर्ते कि "A0YYYY ..." आदि अमान्य प्रतिनिधित्व हैं यदि कोई YYYY ... दिनांक अभी भी उपयोग किए जाते हैं)। कुछ बिंदु पर जब वर्ष के अंकों की संख्या तीन से विभाज्य होती है, तो हम ब्रह्मांड की गर्मी से पहले अक्षरों से बाहर नहीं चलने देने का आश्वासन देने के लिए, हम प्रत्येक बार अल्फा प्रीफिक्स को बदलने के लिए तीन अंकों को जोड़ना शुरू करेंगे।
मोंटी हार्डर

35
यह नोट करना महत्वपूर्ण है कि इस प्रारूप के साथ, छंटाई केवल "आसान" नहीं है। लेक्सिकल (वर्ण आधारित) सॉर्ट टेम्पोरल सॉर्ट के बराबर हो जाता है, जिसका अर्थ है कि आप अस्थायी रूप से पार्सिंग के बिना सॉर्ट कर सकते हैं ।
jpmc26

135

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

तो खेतों के बीच के क्रम को खेतों के भीतर क्रम के अनुरूप रखने के लिए , एकमात्र विकल्प YYYYMMDD है।

जैसा कि ज़ाहाज़ और आर्सेनी मोरज़ेंको ने कहा, YYYYMMDD प्रारूप आसानी से बनते हैं। यह एक भाग्यशाली संयोग नहीं है, कि खेतों को सबसे लंबे समय तक रखने का एक सीधा परिणाम है (और लंबाई को निश्चित रखते हुए; हम यहां एक Y10K समस्या पेश कर रहे हैं।)


34
जब आप मजाक कर रहे होंगे, तो यह कोड गंभीरता से हमें 8000 वर्षों में परेशान कर सकता है। कोड लंबे समय तक रहता है की तुलना में किसी को भी उम्मीद है ... 😓
deceze

15
@ डिसेज़ ISO8601 में पहले से ही 5 अंकों के वर्ष के प्रावधान हैं, लेकिन यह देखना दिलचस्प होगा कि वर्तमान में कौन से डेटटाइम कार्यान्वयन इसके लिए अनुमति देते हैं।
ज़ैक फ़रगेर

4
@ZacFaragher, मुझे यकीन है कि बाद में लागू करने के लिए हमारे पास बहुत समय होगा, जल्दी करने की आवश्यकता नहीं है, है ना ...?
ilkachachu

51
@ डिसेज़ आपने मुझे अनफिट क्यों किया - क्या आपको पता चला है कि कैंसर का इलाज कैसे किया जाता है? नहीं, यह वर्ष 9999 है और आप COBOL को जानते हैं।
1830 बजे user3067860

6
आप अपने टाइपो को ठीक करना चाह सकते हैं। शब्द सदियों , का बहुवचन सहस्राब्दी , obligatorily एक डबल एन में डबल एन से मिलान करने के साथ लिखा जाता है वार्षिक लैटिन से अन्नुस वर्ष के लिए। जब आप इसे सिर्फ एक-एन के साथ गलत लिखा है, यह अब दुख की एकल एन से मेल खाता है गुदा लैटिन से गुदा अंग्रेजी खेल में अपनी ग्रहण के रूप में एक ही अर्थ के साथ। संक्षेप में, आपको हमेशा इसे इस तरह से वर्तनी की आवश्यकता होती है, जिसका अर्थ है कि आप हजारों वर्षों में बात कर रहे हैं, हजारों बट-छेद नहीं। :)
tchrist

57

क्या इसका कोई कारण है?

हाँ। सॉफ्टवेयर के वे टुकड़े ISO 8601 का उपयोग करेंगे ।

आईएसओ 8601 में अन्य तारीखों के फायदों की संख्या है:

  • यह एक कल्पना दस्तावेज़ के साथ एक मानक है :)
  • यह असंदिग्ध है। mm / dd / yyyy और dd / mm / yyyy भ्रमित हो सकते हैं जब तक कि यह 13 वें दिन से पहले न हो।
  • यह लेक्सिकोग्राफिक रूप से आरोही समय क्रम में है, इसलिए किसी विशेष तिथि-छँटाई तर्क की आवश्यकता नहीं है। यह विशेष रूप से फ़ाइल नाम में उपयोगी है, जहां लेक्सिकोग्राफिक संख्या छँटाई अक्सर भ्रमित होती है (जैसे 1_file, 10_file, 2_file)।
  • यह 4-अंक वर्ष और शून्य गद्देदार महीना और वर्ष अनिवार्य करता है। यह वर्ष 2000 की समस्या और अन्य अस्पष्टताओं से बचा जाता है।

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

औचित्य के लिए कल्पना का परिचय देखें।

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

...

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

मानक सीमांकक के उपयोग को कम करने के रूप में "बुनियादी" विविधताओं को परिभाषित करता है। तो, विस्तारित प्रारूप YYYYMMDDका मूल विकल्प है YYYY-MM-DD


4
मुझे नहीं पता था कि ISO 8601 YYYYMMDD के अलावा YYYY-MM-DD को भी अनुमति देता है।
keuleJ

iso.org/iso-8601-date-and-time-format.html इंगित करता है कि YYYY-MM-DD का "विस्तारित प्रारूप" 8601 के लिए एकमात्र प्रारूप है?
अक्टूबर को ऑस्कर ऑस्टेगार्ड

3
@keuleJ YYYY-MM-DD के बजाय YYYYMMDD जैसे सीमांकक के उपयोग को न्यूनतम करना आईएसओ 8601 मानक में "बुनियादी" प्रारूप भिन्नता कहा जाता है।
बेसिल बॉर्क

आईएसओ 8601 के दो और लाभ: (ए) मशीन के द्वारा छलनी करना आसान है जिसमें कोई वर्ण नहीं है और कोई स्थानीय पाठ नहीं है, और (ख) वर्ष भर की संस्कृतियों के साथ मनुष्यों द्वारा सहजता से पेश आना आसान है (अगर समकालीन हो) और अंग्रेजी भाषा ग्रहण किए बिना।
तुलसी बॉर्क

55

ऐसा इसलिए है क्योंकि इसे करने के अन्य सभी तरीके अस्पष्ट हैं।

01/02/2003 का क्या मतलब है? जनवरी २००३? या यूरोप में: 1 फरवरी 2003? यह और भी बदतर हो जाता है यदि आप वर्ष के लिए दो अंकों का उपयोग करते हैं, जैसा कि 01/02/03।

यही कारण है कि आप YYYYMMDD का उपयोग करते हैं, यह सम्मेलन है जो हमें तारीखों के बारे में स्पष्ट रूप से संवाद करने में सक्षम बनाता है, 20030201 एक तारीख के रूप में हमेशा स्पष्ट होता है। (और यह छांटना आसान बनाता है)

(अब नहीं जाना है कि पूर्णांक के रूप में 20 मिलियन 30 हजार 2 सौ और 1. कृपया ठीक है? बहुत कृपया?)


14
"20030201 एक तारीख के रूप में हमेशा स्पष्ट होता है" : यह बिल्कुल मामला नहीं है। यह "01/02/2003" जैसा ही अस्पष्ट है जब तक कि आप नहीं जानते कि YYYYMMDD (या क्या यह YYYYDDMM या DDMMYYYY है? ...) इसका उपयोग किया जा रहा प्रारूप है। आपको हमेशा तारीख के प्रारूप को जानना होगा; कोई "सम्मेलन" नहीं है जो चीजों को अस्पष्ट बनाता है।
स्कोमीसा

6
@skomisa जो कि काफी गलत है। आईएसओ 8601 ने अंतरराष्ट्रीय मानक तिथि प्रारूप को विशेष रूप से आपके द्वारा बताए गए कारणों के लिए परिभाषित किया है। अन्य स्वरूपों में से कोई भी मान्य दिनांक प्रारूप नहीं हैं और 19880605 के बाद से नहीं हुए हैं
। एलन बेट्स

11
@ K.AlanBates आपकी तिथि अस्पष्ट है जब तक हम यह नहीं मान लेते हैं कि इसे आईएसओ 8601 के अनुसार पार्स किया जाना चाहिए।
गोय सेप

16
२००३०२० मार्च २०१ 20th की २० तारीख है, है ना?
डेविड रिचेर्बी

10
@ मर्टिज़न, लेकिन भाषा-विशिष्ट। तुर्की में, यह फरवरी के बजाय atubat है (इससे पहले कि आपको लगता है कि आपका कोड काम करता है, हमेशा तुर्की की जांच करें )।
एनएच।

19

बता दें कि t1 और t2 अलग-अलग पूर्णांक हैं जो YYYYMMDD स्वरूपण में दो बार लिखे गए हैं। तब t1 <t2 का तात्पर्य है कि t1 t1 के बाद हुआ।

आप इस आदेश को डीडी और MM के पहले स्वरूपण के साथ खो देते हैं।

आईएसओ, IMO, एकमात्र समझदार प्रारूप है।


1
सिवाय इसके कि आप इसे एक पूर्णांक के रूप में संग्रहीत नहीं करेंगे, कम से कम मैंने इसे कभी नहीं देखा और न ही इस पर विचार किया।
पाइप

5
@ पका: मेरा विश्वास करो, कुछ लोग करेंगे। हम एक विरासत प्रणाली बनाए रखते हैं जो YYYYMMDD को पूर्णांक के रूप में संग्रहीत करता है। डिजाइन शायद एक स्पष्ट तिथि प्रकार के बिना कुछ पुराने डेटाबेस सिस्टम में उत्पन्न हुआ था और पीछे की संगतता के लिए रखा गया था। यह सुंदर नहीं है। यह मत करो।
Heinzi

19
@ यह सॉफ्टवेयर उद्योग में मेरा अनुभव रहा है कि जब भी कोई उचित व्यक्ति "लेकिन आप एक्स को कभी नहीं करेंगे" कहना चाहते हैं तो हमेशा कम से कम एक काउंटर उदाहरण होता है
जोसेफ रोजर्स

5
@ पिप डेटा वेयरहाउसिंग में, यह एक असामान्य है कि आप एक yyyymmdd पूर्णांक का उपयोग तारीखों की तालिका के लिए प्राथमिक / सरोगेट कुंजी के रूप में कर सकते हैं।
साबुन थैरेपी

4
@ ठीक, ठीक है, DNS ज़ोन की अनुक्रम संख्या एक 32-बिट पूर्णांक है, जिसे ज़ोन बदलने पर बढ़ाया जाना चाहिए। जबकि यह सिर्फ एक सादा संख्या हो सकती है, एक आम मुहावरा 2018092601 जैसे नंबरों का उपयोग करना है ... फिर वर्णित में जादू की संख्याओं की कुछ उत्सुक परिभाषाएं हैं feature_test_macros(7), जैसे कि _POSIX_C_SOURCE > 200809Lइसका मतलब है कि POSIX.1-2008 से सुविधाओं का समर्थन किया जाता है ...
ilkachachu

12

एक बिंदु का उल्लेख नहीं किया गया है, इंटरैक्टिव आदानों में, यह प्रारूप इनपुट को नियंत्रित करने की अनुमति देता है।

अगर किसी महीने में 28, 29, 30 या 31 दिन नहीं हैं तो सिस्टम को यह पता नहीं चल सकता है कि कोई खास साल और महीना है या नहीं। जब इंटरैक्टिव इनपुट उस वर्ष और महीने को पूरा करता है तो यह जांच कर सकता है कि दिन (अंतिम डाला गया) अनुमत सीमा में है या नहीं।

दी गई, यह सवाल काफी हद तक तारीख प्रारूप के बारे में था, लेकिन यह तर्क दिया जा सकता है कि तिथि प्रारूप उपयोगकर्ता के लिए प्रस्तुत प्रारूप का अनुसरण करता है।


7

YYYYMMDD आदेश उसी तरह से दिनांकित करते हैं जब आप संख्याओं का आदेश देते हैं: सबसे महत्वपूर्ण भाग पहले। MMDDYYYY "एक सौ तेईस" को "बीस और एक सौ तीन" के रूप में लिखना पसंद करेंगे।

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


62
आप "हमारी संस्कृति" को पुनः प्राप्त करना चाह सकते हैं क्योंकि मेरी संस्कृति में यह DDMMYYYY है, इसलिए यह "हमारी" संस्कृति सिर्फ आपकी नहीं है
स्लीबटमैन

66
MMDDYYYY तिथि प्रारूप का उपयोग करने वाले सभी देशों का व्यापक मानचित्र img-9gag-fun.9cache.com/photo/a2mXmGd_700b.jpg
Peregrine

9
एक अजीब तर्क की तरह लगता है: "महीने बहुत तेजी से बदलते हैं ताकि उनके महत्व को बरकरार रखा जा सके" -> फिर उस दिन को पहले क्यों नहीं रखा जाए क्योंकि यह तेजी से बदलता है?
Wim Deblauwe

7
@JoelCoehoorn, यह स्पष्ट करना आसान है ("हमारी अमेरिकी संस्कृति में")। "हमारे" / "हम" का अर्थ अक्सर "स्टैकएक्सचेंज कम्युनिटी" से है।
एओई

14
ठीक ठीक। Stackoverflow अंतरराष्ट्रीय है । आप यूएस आधारित हैं, यह नहीं कहते हैं, या यहां तक ​​कि यह भी संभावना है कि अन्य भी हैं। आप अपने पाठकों के इलाके के बारे में कोई धारणा नहीं बना सकते हैं, वे दुनिया भर में हैं। और आपके अधिकांश पाठक न तो आप होंगे, न ही ओपी, बल्कि अन्य लोग जो Google पर आपका उत्तर पाते हैं। यह बहुत टिप्पणी एक अलग महाद्वीप पर लिखी गई है, जिस पर आप रहते हैं। और जब हम अपने स्वयं के ईहम - दिलचस्प आदतें हैं, हम सबसे निश्चित रूप से यहाँ MM / DD / YYYY का उपयोग नहीं करते हैं ...
22

6

छंटाई का उल्लेख किया गया है लेकिन अभी तक करने के लिए सबसे उपयोगी कारण उन्हें "तार" के रूप में तुलना करना है, और हाँ एक 26 चरित्र टाइमस्टैम्प को इसी तरह से आदेश दिया गया है।

मुझे पता है कि इस तरह की तुलना छँटाई के लिए आवश्यक है, लेकिन यह आम तौर पर एक 2 तत्व प्रकार के लिए उपयोगी है।

मैंने उन परियोजनाओं पर काम किया है जहाँ इसे अपनाया नहीं गया था, और हाँ, प्रोग्रामरों ने तार के रूप में तारीखों की तुलना करने के लिए (मिश्रित परिणामों के साथ) प्रयास किया।

सुंदर स्वरूपण ग्राहक पक्ष या टाइप बैठना के लिए है।


5

यह प्रारूप तारीखों के कालानुक्रमिक क्रम के समान तार का वर्णमाला क्रम बनाता है। यह उपयोगी है क्योंकि कई उपकरण उदाहरण के लिए नाम से फ़ाइलों की वर्णमाला क्रमबद्धता प्रदान करते हैं, लेकिन फ़ाइल नामों से मनमाने ढंग से स्वरूपित तिथियों को पार्स करने का कोई तरीका नहीं है।


4

यह प्रतिबंध के बारे में है। YYAR, MONTH और DAY को मापदंडों के रूप में कल्पना करें, प्रारूप में YYYYMMDD प्रत्येक पैरामीटर पिछले वाले की तुलना में अधिक प्रतिबंधात्मक है।

इसलिए यदि आप 1970 में हुई किसी चीज़ को खोजना चाहते हैं, तो आप इसे एक स्ट्रिंग शुरू करके खोज कर सकते हैं "1970*", लेकिन यदि आप इस बात को याद करते हैं कि आप किस महीने को जोड़ सकते हैं "197005*"। इस तरह दिनांक का हर "पैरामीटर" आपको अधिक विशिष्ट जानकारी देता है।

यह कम विशिष्ट जानकारी ( "1970*") से अधिक विशिष्ट जानकारी ( "19700523") तक जाने का एकमात्र तरीका है ।


3
वास्तव में एक महान तर्क नहीं है - विशिष्ट वर्षों के बजाय विशिष्ट महीनों में होने वाली चीजों की खोज करना सामान्य है।
क्यूबिक

1
तो 1970*और 197005*"ग्लोब" वाइल्डकार्ड वाक्य रचना का प्रतिनिधित्व करते हैं, तो आप ग्लोब की खोज करके MMDDYYYY तिथियों का एक गुच्छा खोज सकते हैं *1970या 05*1970। आपका उत्तर स्पष्ट रूप से कुछ अतिरिक्त बाधाओं को मान सकता है जिन्हें आपने स्पष्ट रूप से उल्लेख नहीं किया था, और आपकी धारणा को समझाकर सुधार किया जा सकता है।
क्क्सप्लसोन

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

इसका मतलब यह भी है कि आप अपेक्षाकृत सरल रीगेक्स के साथ तारीखों के अनुक्रम का चयन कर सकते हैं ...
हार्पर

1

क्यों प्रोग्रामिंग में, डिफ़ॉल्ट तिथि प्रारूप YYYYMMDD है ...

यह इनपुट और आउटपुट के लिए एक मानव पठनीय प्रारूप है, यह जरूरी नहीं कि उस तरह से संग्रहित हो।

सभी प्रोग्रामिंग भाषाओं के एक तिहाई से अधिक देशों में अंग्रेजी के साथ प्राथमिक भाषा के रूप में विकसित किया गया था और अधिकांश आधुनिक कुछ विवरण के मानक का पालन करते हैं - तारीखों के लिए अंतर्राष्ट्रीय मानक आईएसओ 8601 है

अधिक जानकारी: (TMI?)

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

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

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

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

जहाँ तक कंप्यूटर का सवाल है, यह UNIX एपोच समय का उपयोग करने की संभावना है , 00:00:00 समन्वित यूनिवर्सल टाइम (UTC), गुरुवार, 1 जनवरी 1970 के बाद से समाप्त होने वाले सेकंड की संख्या, जहाँ हर दिन इलाज किया जाता है जैसे कि इसमें शामिल है बिल्कुल 86400 सेकंड। जूलियन डे भी देखें । YYYYMMDD प्रारूप को केवल उदाहरणार्थिक मनुष्यों द्वारा पसंद किया जाता है, IAU एक वर्ष को 365.25 दिनों (31.5576 मिलियन सेकंड) के जूलियन वर्ष के रूप में मानता है जब तक कि अन्यथा निर्दिष्ट न हो।


1
वास्तव में लगभग हर मानव और सॉफ्टवेयर का टुकड़ा जो मुझे कभी मिला है वह किसी और प्रारूप को पसंद करता है।
गोइयो

1
आपसे मिलकर खुशी हुई! मैं डेव हूँ, और मैं YYYYMMDD पसंद करता हूं
इंजीनियर

0

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

यदि उन चीजों में से अधिकांश हैं जो आपको तारीखों के साथ करने की आवश्यकता है, और आपको इसे बहुत कुछ करने की आवश्यकता है, तो इस प्रारूप में बहुत अधिक अपील है।

तुलना करके, DD / MM / YYYY जैसे सामान्य स्वरूपों में दिनांक ASCII वर्णों के तार के रूप में 10 बाइट लेते हैं। YYYYMMDD तार 8 तक कम हो जाते हैं और "अभ्यावेदन की तुलना तारीखों की तुलना करने के समान है" लाभ प्राप्त करते हैं, लेकिन फिर भी स्ट्रिंग-आधारित तुलना एकल-पूर्णांक तुलना के बजाय चरित्र-दर-वर्ण होती है।


2
यह तीन बाइट्स में एक तारीख पैक करने के लिए तुच्छ है। रेंज 0000 ~ 9999 में 14 बिट्स की आवश्यकता है, 01 ~ 12 के लिए 4 बिट्स की आवश्यकता है, और 01 बिट्स की 31 के लिए 01 बिट्स की आवश्यकता है। तीन-बाइट मात्रा में शेष बिट का उपयोग करके, आप एक दिन के संकल्प को बनाए रखते हुए 32,768 साल की अवधि में तारीखों का प्रतिनिधित्व कर सकते हैं। इसका उपयोग, उदाहरण के लिए, 24576 ई। के माध्यम से सीमा वर्ष 8191 ईसा पूर्व में तारीखों का प्रतिनिधित्व करने के लिए किया जा सकता है। बिट्स को पैकिंग के रूप में कहें, yyyyyyyyyyyyyymmmmddddd, दशमलव प्रतिनिधित्व सीधे तुलनीय रहता है (हालांकि सीधे मानव पठनीय नहीं है, लेकिन डेटाबेस भौतिक भंडारण में कौन परवाह करता है?)।
एक सीवीएन

0

समान कारण चंद्रमा हरी चीज़ से बना है: यह नहीं है। ज्यादातर मामलों में डिफ़ॉल्ट प्रारूप कुछ प्रकार का स्थानीयकृत स्ट्रिंग है। कभी-कभी आईएसओ प्रारूप का उपयोग किया जाता है लेकिन आमतौर पर बेहतर पठनीयता के लिए डैश के साथ। YYYYMMDD(या %Y%m%dमें strftimeभाषा) शायद ही कभी डिफ़ॉल्ट है। निष्पक्ष होने के लिए मुझे यकीन है कि मैंने इसे देखा है, लेकिन मैं अभी एक उदाहरण के बारे में नहीं सोच सकता।

यूनिक्स की तारीख (GNU कोर यूटिलिटीज)

date

आउटपुट:

Wed Sep 26 22:20:57 CEST 2018

अजगर

import time
print(time.ctime())

उत्पादन:

Wed Sep 26 22:27:20 2018

सी

#include <stdio.h>
#include <time.h>

int main () {
   time_t curtime;

   time(&curtime);
   printf(ctime(&curtime));
   return(0);
}

आउटपुट:

Wed Sep 26 22:40:01 2018

सी ++

#include <ctime>
#include <iostream>

int main()
{
    std::time_t result = std::time(nullptr);
    std::cout << std::ctime(&result);
}

आउटपुट:

Wed Sep 26 22:51:22 2018

जावास्क्रिप्ट

current_date = new Date ( );
current_date;

आउटपुट:

Wed Sep 26 2018 23:15:22 GMT+0200 (CEST)

SQLite

SELECT date('now');

आउटपुट:

2018-09-26

लिब्रे ऑफिस Calc

यहां छवि विवरण दर्ज करें

Gnumeric

यहां छवि विवरण दर्ज करें

OnlyOffice

यहां छवि विवरण दर्ज करें

अजगर + सुन्न

import numpy as np
pd.datetime64('now')

आउटपुट:

numpy.datetime64('2018-09-26T21:31:55')

पायथन + पांडा

import pandas as pd
pd.Timestamp('now', unit='s')

आउटपुट:

Timestamp('2018-09-26 21:47:01.277114153')

सॉफ्टवेयर इंजीनियरिंग

यहां छवि विवरण दर्ज करें

apport.log

ERROR: apport (pid 9742) Fri Sep 28 17:39:44 2018: called for pid 1534, signal 6, core limit 0, dump mode 2

alternatives.log

update-alternatives 2018-05-08 15:14:24: run with --quiet --install /usr/bin/awk awk /usr/bin/mawk 5 --slave /usr/share/man/man1/awk.1.gz awk.1.gz /usr/share/man/man1/mawk.1.gz --slave /usr/bin/nawk nawk /usr/bin/mawk --slave /usr/share/man/man1/nawk.1.gz nawk.1.gz /usr/share/man/man1/mawk.1.gz

कप / access.log

localhost - - [28/Sep/2018:16:41:58 +0200] "POST / HTTP/1.1" 200 360 Create-Printer-Subscriptions successful-ok

syslog

Sep 28 16:41:46 pop-os rsyslogd:  [origin software="rsyslogd" swVersion="8.32.0" x-pid="946" x-info="http://www.rsyslog.com"] rsyslogd was HUPed

10
अपने तर्क में जोड़ने के लिए, उनमें से कितने को उस तरह से स्वरूपित किया गया है क्योंकि कंप्यूटर पर उपयोगकर्ता सेटिंग्स के कारण आपने विभाजन चलाया है?
टोपेर

पहला वाला वास्तव में "बैश" नहीं है, यह तिथि कार्यक्रम है (और यह Do 27. Sep 22:27:09 CEST 2018यहाँ आउटपुट करता है।)
पाओलो एबरमन

@ Pa @loEbermann आप सही हैं, मुझे आशा है कि अब यह बेहतर है। जैसा कि मैंने कहा कि इनमें से कई प्रारूप स्थानीय हैं इसलिए आप जो वास्तविक प्रारूप देखेंगे वह आपके स्थानीयकरण विकल्पों पर निर्भर करेगा।
गोइयो

3
जबकि इस उत्तर की बात एंड-यूज़र-ओरिएंटेड ऐप्स के लिए सही है, इसलिए सिस्टम, डेटा सीरियललाइज़ेशन, मैसेज / डेटा प्रोटोकॉल, लॉगिंग, ट्रेसिंग, डीबगर्स और इतने पर डेटा एक्सचेंज के लिए नहीं। आईएसओ 8601 मानक तेजी से सिस्टम के प्रवेश और प्रोग्रामर के लिए इस तरह के उपयोग के लिए आदर्श बन रहा है। अंतरराष्ट्रीय या स्थानीय-अज्ञेय परिदृश्यों के लिए डिट्टो।
बेसिल बोर्क

@BasilBourque धन्यवाद, मैंने अपने सिस्टम में पाए जाने वाले लॉग का एक यादृच्छिक नमूना जोड़ा। मेरे पास अन्य प्रकार के उदाहरण नहीं हैं। लेकिन मुझे नहीं लगता है कि विशिष्ट डोमेन में आईएसओ 8601 को डिफॉल्ट करने की ओर एक प्रवृत्ति अन्य प्रारूपों में चूक करने वाले सॉफ़्टवेयर की विशाल मात्रा के सामने अपने मूल संस्करण को "प्रोग्रामिंग में डिफ़ॉल्ट" बनाती है।
गोयो सेप

-1

अब तक उल्लेख नहीं किया गया एक अतिरिक्त लाभ यह है कि वांछनीय मात्रा का ठहराव (मूल्यों के समान सामान्य श्रेणी से संबंधित एक सटीक मान असाइन करना) एक अपेक्षाकृत आसान और तेज़ एकल ऑपरेशन है।

मान लीजिए कि आप एक रिपोर्ट लिख रहे हैं जो आज की घटनाओं को सारांशित करती है, जैसे कि बिक्री का योग और संख्या। बिक्री की तारीख और समय को YYYYMMDDHHMISS के रूप में संग्रहीत किया जाता है, आपको बस बिक्री के दिन तक अपने डेटाइम को कम करने के लिए सबसे कम 8 वर्ण (यदि यह एक स्ट्रिंग है) या पूर्णांक (यानी फर्श) 1,000,000 से रखने की आवश्यकता है।

इसी तरह, यदि आप महीने की बिक्री चाहते हैं, तो आप केवल सबसे बाईं ओर 6 अंक रखते हैं, या 100,000,000 से विभाजित करते हैं

निश्चित रूप से, आप तर्क दे सकते हैं कि किसी भी स्ट्रिंग हेरफेर संभव है, "12-25-2018 12:34 बजे" की बिक्री के लिए एक डेटाटाइम को महीने और वर्ष प्राप्त करने के लिए कई बार प्रतिस्थापित और हेरफेर किया जा सकता है। संख्यात्मक रूप में 122520181234 को विभाजित और संशोधित किया जा सकता है, और गुणा किया जा सकता है, और कुछ और विभाजित किया जा सकता है, और अंततः एक महीने और एक वर्ष का उत्पादन भी कर सकता है .. लेकिन कोड को लिखना, पढ़ना, बनाए रखना और समझना वास्तव में मुश्किल होगा।

और यहां तक ​​कि परिष्कृत डेटाबेस ऑप्टिमाइज़र एक स्तंभ पर एक इंडेक्स का उपयोग करने में सक्षम नहीं हो सकते हैं जहां क्लॉज के लिए यदि दिनांक फॉर्म MM / DD / YYYY था, लेकिन एक साथ कट और pieced। इसकी तुलना में, एक YYYMMDD प्रतिनिधित्व को संग्रहीत करने और दिसंबर 2018 को चाहते हैं, जहां ilk के क्लॉज़ dateasstring LIKE '201812%'या dateasint BETWEEN 20181200 and 20181299- कुछ इंडेक्स का उपयोग आसानी से किया जा सकता है

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

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