2015-07-29 9 views
6

के रूप में युग से पहले तिथियों का प्रतिनिधित्व कैसे करें यह मेरे लिए हुआ कि मुझे 1 9 70 जनवरी से पहले तारीखों को स्टोर करने के लिए एक तंत्र से अवगत नहीं है। यूनिक्स टाइमस्टैम्प के रूप में 1। चूंकि उस तारीख यूनिक्स "युग" है, यह आश्चर्य की बात नहीं है।यूनिक्स टाइमस्टैम्प

लेकिन - हालांकि यह इसके लिए डिज़ाइन नहीं किया गया है - फिर भी मैं यूनिक्स प्रारूप में बहुत दूर की तारीखों को संग्रहीत करना चाहता हूं।
मुझे कारणों से इसकी आवश्यकता है।

तो मेरा सवाल यह है कि: यूनिक्स-टाइमस्टैम्प बनाने के बारे में कोई कैसे "अमान्य" होगा लेकिन अभी भी कार्य करने वाली तिथियां रखेगा? सेकंड की नकारात्मक मात्रा में संग्रह करना होगा? क्या हम यूनिक्स-टाइमस्टैम्प में नकारात्मक सेकेंड की मात्रा भी स्टोर कर सकते हैं? मेरा मतलब है कि यह हस्ताक्षर नहीं है?

अगर मैं सही हूं तो मैं केवल 1901. dec. 13 20:45:52 के रूप में तारीखों को स्टोर कर सकता हूं, क्या इसे किसी भी माध्यम से इतिहास में आगे बढ़ाया जा सकता है?

+1

यूनिक्स 'time_t' एक हस्ताक्षरित 32-बिट int है, इसलिए यह 1 9 01 में वापस जा सकता है जैसा आपने नोट किया है। आपको अपने ओएस की जांच करनी चाहिए, कई ने 'टाइम_टी' तक 64 बिट्स का विस्तार किया है, जो आपको कुछ सौ अरब साल का रिवेव देता है। –

उत्तर

9

Unix Timeआमतौर पर यूटीसी में 1970 के पहले क्षण से पूरे सेकंड के एक 32-बिट संख्या, epoch जा रहा है 1 January 1970 00:00:00 UTC है। इसका अर्थ है कि युग के दोनों तरफ लगभग आधा हिस्सा लगभग 136 वर्ष है। नकारात्मक संख्याएं पहले हैं, शून्य युग है, और सकारात्मक बाद में हैं। एक हस्ताक्षरित 32-बिट पूर्णांक के लिए, मान 1901-12-13 से 2038-01-19 03:14:07 UTC तक हैं।

यह पत्थर में नहीं लिखा गया है। खैर, यह लिखा है, लेकिन विभिन्न पत्थरों के समूह में। बूढ़े लोग 32-बिट कहते हैं, नए 64-बिट। कुछ चश्मा यह है कि अर्थ "कार्यान्वयन-परिभाषित" है। कुछ यूनिक्स सिस्टम युग के पिछले भविष्य में विस्तारित करने के लिए एक हस्ताक्षरित int का उपयोग करते हैं, लेकिन सामान्य अभ्यास एक हस्ताक्षरित संख्या रहा है। कुछ पूर्णांक की बजाय एक फ्लोट का उपयोग करते हैं। विवरण के लिए, Unix Time, और this Question पर विकिपीडिया लेख देखें।

तो, मूल रूप से, आपके प्रश्न का कोई मतलब नहीं है। आपको अपनी प्रोग्रामिंग भाषा (मानक सी, अन्य सी, जावा, आदि), पर्यावरण (POSIX-compliant), विशेष सॉफ्टवेयर लाइब्रेरी, या डेटाबेस स्टोर, या ऐप के संदर्भ को जानना होगा।

बचें गणना-से-युग

विशिष्टता की इस कमी में जोड़े तथ्य यह है कि a couple dozen other epochs विभिन्न सॉफ्टवेयर सिस्टम, कुछ अत्यंत लोकप्रिय और आम द्वारा इस्तेमाल किया गया है। उदाहरणों में 1 जनवरी, 1601 एनटीएफएस फाइल सिस्टम & कोबोल, 1 जनवरी, 1 9 80 को विभिन्न एफएटी फाइल सिस्टम, 1 जनवरी, 2001 को ऐप्पल कोको के लिए, और 0 जनवरी, 1 9 00 को एक्सेल & कमल 1-2-3 स्प्रेडशीट्स के लिए शामिल है।

आगे यह तथ्य जोड़ें कि गिनती के विभिन्न ग्रैन्युलरिटी का उपयोग किया गया है। पूरे सेकंड के अलावा, कुछ सिस्टम मिलीसेकंड, माइक्रोसेकंड, या नैनोसेकंड का उपयोग करते हैं।

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

  • दिनांक
    • 2015-07-29
  • एक यूटीसी से ऑफसेट के साथ एक तिथि-समय (ऑफसेट पर टिप्पणी गद्दी शून्य)
    • 2015-07-29T14:59:08Z (जेड यूटीसी के लिए "ज़ुलु" है)
    • 2001-02-13T12:34:56.123+05:30
  • वीक (साथ या सप्ताह के दिन बिना)
    • 2015-W31
    • 2015-W31-3
  • क्रमसंख्या तिथि (दिन के अनुसार वर्ष)
    • 2015-210
  • अंतराल
    • "2007-03-01T13:00:00Z/2008-05-11T15:30:00Z"
  • अवधि (PnYnMnDTnHnMnS के प्रारूप)
    • P3Y6M4DT12H30M5S = "तीन साल, छह महीने, चार दिन, बारह घंटे, तीस मिनट, और पाँच सेकंड"

इन विषयों पर कई और प्रश्नों और उत्तरों के लिए StackOverflow.com खोजें।

+0

बहुत बढ़िया, हालांकि मुझे डर था कि यह 'कार्यान्वयन-परिभाषित' होने के लिए नीचे आ जाएगा। – Wolfer

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