दिनांक - 1901 से पहले के वर्षों को अमान्य माना जाता है


11

मेरे पास मेरे सिस्टम पर दिनांक (GNU कोरुटिल्स) 7.1 स्थापित है।

यदि मैं 14-दिसंबर -1901 से पहले की तारीखों की जांच करने की कोशिश करता हूं, तो मुझे "अमान्य दिनांक" त्रुटि मिलती है। उदाहरण के लिए,

  $ date -d 1901-12-13
  date: invalid date `1901-12-13'

  $ date -d 1901-12-14
  Sat Dec 14 00:00:00 EST 1901

date1901 से पहले के वर्षों को वैध मानने की उपयोगिता बनाने के लिए मुझे क्या करना चाहिए ?

मुझे 19-जनवरी -2038 के बाद की तारीखों के लिए इसी तरह की त्रुटियां मिलीं


मुझे कोई त्रुटि नहीं मिली। मैं 8.10 coreutils का उपयोग कर रहा हूँ, शायद एक पुराना बग?
xenoterracide

@xenoterracide आप 64-बिट सिस्टम हैं?
मिकेल

@ मिकेल हाँ, मैं हूँ
xenoterracide

जवाबों:


15

अच्छा प्रश्न।

प्रलेखन यह अनुमति दी जानी चाहिए कहते हैं।

 info date 'Date input formats' 'Calendar date items'

संख्यात्मक महीनों के लिए, ISO 8601 प्रारूप `YEAR-MONTH-DAY’ की अनुमति है, जहाँ YEAR किसी भी संख्या में है, ...

यदि एक संख्या दस से कम है, तो एक अग्रणी शून्य मौजूद होना चाहिए।

यदि YEAR 68 या इससे छोटा है, तो इसमें 2000 जोड़ा जाता है; अन्यथा, यदि YEAR 100 से कम है, तो इसमें 1900 जोड़ा जाता है।

क्या आप 32-बिट सिस्टम पर हैं?

क्या आपको 2038-01-20 के बाद की तारीखों के साथ एक त्रुटि मिलती है, जैसे

date -d '2038-01-20'

यदि ऐसा है, तो ऐसा लगता है कि GNU दिनांक 32-बिट समय मान का उपयोग कर रही है।

मुझे यकीन है कि कैसे आप एक 64-बिट प्रणाली का उपयोग कर या एक अलग उपकरण का उपयोग कर, उदाहरण के लिए की तुलना में इस अन्य ठीक कर सकते हैं नहीं कर रहा हूँ दिनांक समय पर्ल में या datetime अजगर में।

कुछ पृष्ठभूमि:

यूनिक्स बार 1 जनवरी 1970 से पूर्णांक मान का उपयोग करके सेकंड की संख्या की गणना करता है। यदि सिस्टम 32-बिट पूर्णांक का उपयोग करता है, तो यह केवल 2.1 बिलियन सेकंड आगे (2038-01-19 03:14:02 UTC तक) और 2.1 बिलियन सेकंड पीछे (1901-12-13 20:45:52 पर पीछे) की गणना कर सकता है यु.टी. सी)।

अधिक जानकारी पर:


धन्यवाद मिकेल, मुझे विश्वास है कि मैं एक 32 बिट मशीन पर हूँ। दरअसल, मैं एक दूरस्थ सर्वर का काम कर रहा हूं और सर्वर न unameकेवल कमांड के साथ बहुत सारी जानकारी भी प्रकट करता है, इसके अलावा यह कहता है कि यह एक i686 मशीन है, जिसे मैं 32 बिट मशीन मानता हूं। 2038 की समस्या के लिए, हाँ, यह समस्या रिमोट सर्वर में मौजूद है। आपके इनपुट के लिए फिर से धन्यवाद! बहुत सराहना की!!
जसदीप सिंह

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

7

आपका सिस्टम (या कम से कम उस दिनांक का संस्करण ) शायद 32-बिट आंतरिक समय मान का उपयोग कर रहा है।

यूनिक्स युग (शून्य समय मूल्य) 1970-01-01 00:00:00 UTC है। यह प्रारंभिक बिंदु एक हस्ताक्षरित 32-बिट समय मूल्य की सीमा के बाहर 1901-12-13 00:00 ईएसटी डालता है।

1901-12-14 00:00:00 ईएसटी -2147454000
1901-12-13 15:45:52 ईएसटी -2147483648 ( INT_MINसी में उर्फ , न्यूनतम 32-बिट हस्ताक्षरित पूर्णांक)
1901-12-13 00:00 है: 00 ईएसटी -2147540400 है

आप 1901-12-13 15:45:52 ईएसटी का उपयोग करने की कोशिश कर सकते हैं। यह काम करना चाहिए, लेकिन एक सेकंड पहले शायद उसी तरह से विफल हो जाएगा जैसे कि 1901-12-13 00:00।

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