टाइमस्टैम्प, 64 बिट Ubuntu प्रणाली के लिए वर्ष 2038 समस्या


24

मैं 64 बिट Ubuntu सिस्टम का उपयोग कर रहा हूं।

मैं वर्तमान में एक प्रोजेक्ट पर काम कर रहा हूं, जिसमें MariaDB शामिल है। मैं प्रोजेक्ट में टाइमस्टैम्प तकनीक लाने की योजना बना रहा हूं ताकि लोगों को अलग-अलग टाइमज़ोन के लिए सही समय मिले।

मैंने टाइमस्टैम्प के लिए वर्ष 2038 समस्या के बारे में कुछ लेखों को सुना और पढ़ा है। कई लेख बताते हैं कि हम "बिट" अधिक समय खरीदने के लिए 64 बिट सिस्टम का उपयोग करते हैं।

यह "बिट" कितना समय है? क्या अंत तक वेब एप्लिकेशन प्रबंधित करने में सक्षम होना हमारे लिए पर्याप्त है? यदि ऐसा नहीं है, तो क्या यह केवल दो साल के विस्तार की तरह है, इसलिए जब वर्ष 2040 आता है, तो क्या हमारे पास ऐसे अनुप्रयोग हैं जो उचित रूप से काम नहीं करते हैं?


27
64-बिट time_tपूर्णांक का उपयोग करने वाले 64-बिट सिस्टम आपको रविवार को 4 दिसंबर 292,277,026,596 तक - 15:30:08 तक अधिक समय देंगे। आशा है कि यह आपके आवेदन के लिए पर्याप्त है;)
रॉन

4
यह आपको अधिक "बिट" नहीं देता है। यह आपको वास्तव में 32 बिट्स अधिक देता है।
user12205

5
64-बिट टाइमस्टैम्प उन स्टॉपगैप उपायों में से एक है। 100,000,000,000,000 CE में प्रोजेक्ट यूटोपिया पर काम कर रहे लोगों के बारे में क्या? वे कार्यात्मक कंप्यूटर सिस्टम की जरूरत है, भी जा रहे हैं! 128-बिट टाइमस्टैम्प का उपयोग करना हमें ब्रह्मांड के इस पुनरावृत्ति से न केवल किसी भी समय विशिष्ट पहचान देगा, बल्कि कई, कई अन्य।
ब्लैकलाइट शाइनिंग

1
आप इस साइट पर पहले कोई जवाब स्वीकार किए जाते हैं कभी नहीं किया है के रूप में: अगर जवाब में से एक नीचे आप में मदद की, क्लिक करने के लिए ग्रे मत भूलना में अपने पाठ, जिसका अर्थ है की बाईं हाँ, इस उत्तर मान्य है ! ;-)
फेबी

जवाबों:


34

ठीक है, अगर वहाँ एक विकल्प है "शाब्दिक" खरीदने के लिए, यानी एक हस्ताक्षरित 32 बिट पूर्णांक से एक अहस्ताक्षरित 32 बिट पूर्णांक में स्थानांतरण, चीजें 2106 में काम करती रहती हैं।

64 बिट में स्थानांतरित करना "कुछ हद तक बेहतर" है। आपको सैकड़ों अरब वर्ष का संकल्प मिलता है।

और उबंटू ऐसा करता है:

$ uname -p
x86_64

$ date --date=9090-01-01 +%s
224685532800

हालाँकि, यह OS स्तर है। सिर्फ इसलिए कि उबंटू अपने समय के लिए एक 64 बिट पूर्णांक का उपयोग करता है इसका मतलब यह नहीं है कि MySQL / MariaDB इसका उपयोग अपने टाइमस्टैम्प को संग्रहीत करने के लिए करेगा । यदि 2038 की तारीखें आपके लिए महत्वपूर्ण हैं, तो तुरंत परीक्षण शुरू करें।

वास्तव में, मैं आपको कुछ समय बचा सकता हूं। यह अभी भी टूटा हुआ है। इस बग की एक दशक पहले रिपोर्ट की गई थी लेकिन इसका मुख्य परीक्षण 64 बिट इंट के साथ अभी भी विफल है।

mysql> select from_unixtime(2548990800);
+---------------------------+
| from_unixtime(2548990800) |
+---------------------------+
| NULL                      |
+---------------------------+
1 row in set (0.00 sec)

यह भी भंडारण नहीं है। यह थोड़ा दयनीय है।

(और हाँ, कि मारियाडीबी पर चलाया गया था, संस्करण 10.1)


8
10 साल पहले, उनके पास अभी भी इसे ठीक करने के लिए 22 साल हैं। <उंगलियों को पार>>
माइंडविन

4
NB: अहस्ताक्षरित 32 बिट पूर्णांक का उपयोग करना हैक है
केविन

6

इसे पूर्णांक के रूप में संग्रहीत न करें। इसे ISO 8601 फॉर्मेट डेट स्ट्रिंग के रूप में स्टोर करें । यह इंटरनेट भर में उपयोग किया जाने वाला मानक प्रारूप है।

9999-12-31T23:59:59+00:00

17
चलो सब एक गिलास उठाते हैं साल 10 के बग! ;) लेकिन गंभीरता में, जब तार वास्तव में विस्तार योग्य होते हैं, तो वे अपेक्षाकृत विशाल होते हैं (आपका उदाहरण 200 बिट्स है!) और आदिम संख्याओं को पार्स करना और हेरफेर करना तेजी से एक bazillion समय है। वो मायने रखता है।
ओली

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

1
@ यह मायने रखता है, अगर यह वास्तव में मायने रखता है। यह समाधान विफल नहीं होता है जब UNIX युग से अधिक पुराना हो। प्रारूप प्रोटोकॉल और एपीआई में इंटरनेट पर तारीखों के लिए उपयोग किया जाने वाला मानक है। यदि आप मारियाबेड कॉलम में कुछ स्टोर कर रहे हैं, तो वास्तव में, यह है कि आपको इसे डिस्क पर कैसे संग्रहीत करना चाहिए। निश्चित रूप से, स्मृति में, शायद आप इसे अधिक अमीन डेटा संरचना में संग्रहीत करना चाहते हैं। और आपको अंतिम 40 बिट्स की आवश्यकता नहीं है यदि आप हमेशा यूटीसी का उपयोग करते हैं।
dobey
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.