2008-08-30 23 views
53

मुझे लगता है कि कुछ सॉफ्टवेयर जो मैं आज लिख रहा हूं, का उपयोग 30 वर्षों में किया जाएगा। जनवरी 1 00:002038 के लिए तैयार करने के लिए हमें क्या करना चाहिए?

  • गुरु: लेकिन मैं यह भी है कि यह का एक बहुत बाद में 1970.

    #include <stdio.h> 
    #include <time.h> 
    #include <limits.h> 
    
    void print(time_t rt) { 
        struct tm * t = gmtime(&rt); 
        puts(asctime(t)); 
    } 
    
    int main() { 
        print(0); 
        print(time(0)); 
        print(LONG_MAX); 
        print(LONG_MAX+1); 
    } 
    

    निष्पादन परिणाम सेकंड की संख्या के रूप में समय उजागर की यूनिक्स परंपरा पर आधारित है पता है : 00 1970

  • शनि अगस्त 30 18:37:08 2008
  • मंगल जनवरी 19 03:14:07
  • शुक्र दिसंबर 13 20:45:52

कार्यों ctime(), gmtime(), और स्थानीयसमय() सब (युग के बाद से सेकंड में समय का प्रतिनिधित्व करने के लिए एक समय मूल्य एक तर्क के रूप ले 00:00:00 यूटीसी जनवरी 1, 1 9 70; समय देखें (3))।

मुझे आश्चर्य है कि अगर वहाँ कुछ भी सक्रिय एक प्रोग्रामर के रूप में इस क्षेत्र में क्या करना है, या हम पर विश्वास करना है कि सभी सॉफ्टवेयर सिस्टम (उर्फ आपरेटिंग सिस्टम) कुछ कैसे जादुई भविष्य में अपग्रेड कर दिया जाएगा रहे हैं?

अद्यतन यह प्रतीत होता है कि वास्तव में 64-बिट सिस्टम इस से सुरक्षित हैं:

import java.util.*; 

class TimeTest { 
    public static void main(String[] args) { 
     print(0); 
     print(System.currentTimeMillis()); 
     print(Long.MAX_VALUE); 
     print(Long.MAX_VALUE + 1); 
    } 

    static void print(long l) { 
     System.out.println(new Date(l)); 
    } 
} 
  • बुध दिसंबर 31 16:00:00 पीएसटी 1969
  • शनि अगस्त 30 00:02: 40 PDT 2008
  • शनि अगस्त 16 23:12:55 पीएसटी
  • सूर्य दिसंबर 02 08:47:04 पीएसटी 29,226,905 5

लेकिन वर्ष 2 9 2278 99 4 के बारे में क्या?

+1

यदि आप उस वर्ष तक किसी दुर्घटना के लिए ज़िम्मेदार होने के लिए उपस्थित थे, तो आप खुश होंगे, है ना? –

+24

वर्ष 2 9 2278994 के बारे में चिंता न करें। अधिकांश सिस्टम 2147483647 पर असफल होते हैं। – Schwern

+3

मुझे लगता है कि आपने हमें विश्वास दिलाया है - हमें 128 बिट तुरंत स्थानांतरित करने की आवश्यकता है! – new123456

उत्तर

40

मैंने टाइम.h के लिए पोर्टेबल प्रतिस्थापन लिखा है (वर्तमान में केवल लोकलटाइम(), जीएमटाइम(), एमकेटाइम() और टाइमजीएम()) जो 32 बिट मशीनों पर भी 64 बिट टाइम का उपयोग करता है। इसका उद्देश्य समय परियोजनाओं के प्रतिस्थापन के रूप में सी परियोजनाओं में गिरा दिया जाना है। इसका इस्तेमाल पर्ल में किया जा रहा है और मैं रूबी और पायथन की 2038 समस्याओं को ठीक करने का इरादा रखता हूं। यह आपको +/- 2 9 2 मिलियन वर्ष की एक सुरक्षित श्रृंखला देता है।

आप कोड at the y2038 project देख सकते हैं। issue tracker पर कोई प्रश्न पोस्ट करने के लिए स्वतंत्र महसूस करें।

"यह 2 9 साल के लिए कोई समस्या नहीं होने वाला है", इस list of standard answers को उस पर ध्यान दें। संक्षेप में, भविष्य में सामान होता है और कभी-कभी आपको यह जानने की आवश्यकता होती है कि कब। मेरे पास a presentation on the problem, what is not a solution, and what is भी है।

ओह, और यह न भूलें कि कई बार सिस्टम 1 9 70 से पहले तारीखों को संभाल नहीं पाते हैं। सामग्री 1 9 70 से पहले हुई थी, कभी-कभी आपको कब पता होना चाहिए।

+4

@Schwern देखें: इसके अलावा, सितंबर 1752 एक महीने 28 दिनों से कम है। व्यावहारिक प्रोग्रामर के लिए आला ज्ञान धन्यवाद। http://www.genealogytoday.com/columns/everyday/030902.html –

+1

@ डेव ओह हो, आपके इलाके पर निर्भर करता है! 1752 में केवल ब्रिटिश और संपत्ति ग्रेगोरियन में चली गईं। अन्य ने 1582 में 20 वीं शताब्दी तक (पूर्वी यूरोप, चीन, तुर्की, रूस) तक सभी तरह से किया। एक सूची के लिए 'ncal -p' और पूर्ण कहानी के लिए http://en.wikipedia.org/wiki/Gregorian_calendar#Adoption। इसके अलावा कोई वर्ष 0 नहीं है ... जब तक कि आप एक खगोलविद से बात नहीं कर रहे हों। उम्मीद है कि आपको जूलियन/ग्रेगोरियन रूपांतरण से निपटना पड़ेगा। – Schwern

+0

मैंने उस वेबसाइट (y2038) को देखा और कोई कोड डाउनलोड नहीं किया – pm100

-1

2038 तक, समय पुस्तकालयों सभी 64-बिट पूर्णांकों का उपयोग करना चाहिए, तो यह वास्तव में एक सौदा (सॉफ्टवेयर पर कि पूरी तरह से unmaintained नहीं है) की कि बड़े नहीं किया जाएगा।

कोबोल कार्यक्रमों हालांकि मज़ा हो सकता है।

+5

जब घर पर एक नया 30 साल का बंधक समाप्त होता है तो विचार करें। – Schwern

+1

1 9 81 में बाल समर्थन भुगतान के साथ काम करने के साथ मेरा पहला मुठभेड़ था। प्रणाली ने 1 9 82 में बच्चे की अनुमानित जन्मतिथि ली, 18 जोड़ा, 0 मिला, ध्यान दिया कि 81> 0, और अनुमान लगाया गया कि दायित्व खत्म हो गया था। जैसा कि आप कहते हैं, बैंक पहले इस गड़बड़ी में आए थे। –

+0

@Schwern: और आपको लगता है कि 30-वर्षीय बंधक दस्तावेज 1 9 70 से # सेकंड संग्रहित समय_टी मानों का उपयोग करता है? –

-8

ऑपरेटिव शब्द "चाहिए"।

आप futureproofing सुनिश्चित करने के लिए की जरूरत है तो आप अपने खुद दिनांक/समय वर्ग का निर्माण और उपयोग करने वाले, लेकिन मैं ऐसा ही चाहते हैं कर सकते हैं कि अगर आपको लगता है कि आप जो कुछ लिखते विरासत ओएस '

+1

समय क्षेत्र बहुत ही कठिन हैं, स्वयं को संभालने में बहुत मुश्किल है। साथ ही, बस हर ओएस और कई भाषाओं में यह समस्या है, यहां तक ​​कि 64 बिट हार्डवेयर पर चल रहे लोग भी। अपने चमकदार नए मैक में 64 बिट सीपीयू की तरह जो अभी भी 32 बिट समय का उपयोग करता है। – Schwern

+1

मुझे पसंद है कि स्वीकृत उत्तर नकारात्मक वोट दिया गया है :) –

+0

मुझे लगता है कि मैं हमेशा "खुद की भूमिका" का समर्थन करता हूं, भले ही कोई और नहीं करता। :-) –

4

पर इस्तेमाल किया जाएगा कुछ के लिए इस मुद्दे पर विचार this page

4

विजुअल स्टूडियो विजुअल स्टूडियो 2005 में टाइम_टी के 64 बिट प्रतिनिधित्व में स्थानांतरित हो गया है (जबकि अभी भी पीछे की संगतता के लिए _time32_t छोड़ रहा है)।

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

+1

उनका लोकलटाइम() और जीएमटाइम() कार्यान्वयन 1 9 70 से पहले काम नहीं करता है और साल 3001 में असफल हो। http://code.google.com/p/y2038/wiki/AmazingDiscoveries – Schwern

0

अच्छी प्रलेखन रखें, और अपनी समय निर्भरताओं का विवरण शामिल करें। मुझे नहीं लगता कि कई लोगों ने सोचा है कि यह संक्रमण कितना मुश्किल हो सकता है, उदाहरण के लिए HTTP कुकीज़ उस तारीख को तोड़ने जा रही हैं।

15

तुम हमेशा RFC 2550 को लागू करने और सुरक्षित हो हमेशा के लिए ;-)

जाना जाता ब्रह्मांड एक परिमित अतीत और भविष्य है सकते हैं। की वर्तमान आयु [ज़ेबू] में 10 ** 10 और 2 * 10 ** 10 वर्षों के बीच अनुमानित है। ब्रह्मांड की मृत्यु का अनुमान है [निगेल] 10 ** 11 साल में और [ड्रैक] में होने के कारण 10 ** 12 वर्षों में बंद ब्रह्मांड (बड़ी कमी) या 10 ** 14 खुले ब्रह्मांड (ब्रह्मांड की गर्मी की मृत्यु) के लिए वर्षों।

 

Y10K अनुरूप कार्यक्रमों वे ब्रह्मांड के उम्मीद के अनुरूप जीवन उन लोगों के लिए समर्थन तिथियों की सीमा को सीमित करने के लिए चुन सकते हैं। वाई 10 के अनुपालन प्रणालियों को भविष्य में 10 ** 20 वर्षों में में 10 ** 12 साल से Y10K तिथियों को स्वीकार करना होगा। वाई 10 के अनुपालन प्रणाली अतीत में कम से कम 10 ** 2 9 साल और भविष्य के लिए तिथियां स्वीकार करनी चाहिए।

+2

यह अब तक का एकमात्र लंबा-लैंडिंग समाधान है जिसे मैंने अभी तक देखा है। –

+4

आह, लेकिन यह ब्रह्मांड की केवल * अनुमानित * आयु है। अगर वह अनुमान थोड़ा दूर है, तो हम बड़ी परेशानी में हैं! – mickeyf

+1

@ मिकीएफ़, केवल अगर यह अनुमान से अधिक लंबा है ... – CaffGeek

2

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

मैं केवल मजाक कर रहा हूँ!

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

+7

Y2K एक नहीं था की ओर इशारा करते के लिए –

+1

डेविड सही है। एंटरप्राइजेज ने वाई 2 के समस्या को गंभीरता से लिया, उनके सभी सिस्टम की पूरी तरह से समीक्षा की गई। समस्याएं मिलीं, और तय की गई। एक छोटी गैर-महत्वपूर्ण प्रणाली के हिस्से के रूप में - हमने 3 समस्याएं तय की हैं, जिनमें से सभी डेटा हानि का कारण बनती हैं, उन्हें तय नहीं किया गया था। – nos

+0

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

0

2038 के लिए तैयार करने के लिए हमें क्या करना चाहिए?

छुपाएं, क्योंकि सर्वनाश आ रहा है।

लेकिन गंभीरता से, मुझे उम्मीद है कि संकलक (या जो लोग उन्हें लिखते हैं, सटीक होने के लिए) इसे संभाल सकते हैं। उन्हें लगभग 30 साल मिल गए हैं। मुझे उम्मीद है कि यह काफी समय है।

हम किस बिंदु पर वाई 10 के लिए तैयारी करना शुरू करते हैं? क्या किसी भी हार्डवेयर निर्माता/शोध प्रयोगशालाओं को हमारे पास जो भी नई तकनीक है, उसे स्थानांतरित करने का सबसे आसान तरीका देखा गया है?

2

मेरी उम्र को देखते हुए, मुझे लगता है कि मुझे अपनी पेंशन में बहुत कुछ देना चाहिए और मेरे सभी डिप्टी का भुगतान करना चाहिए, इसलिए किसी और को सॉफ्टवेयर फिट करना होगा!

क्षमा करें, अगर आप किसी भी सॉफ्टवेयर तुम आज लिखने की "शुद्ध वर्तमान मूल्य" के बारे में सोचते हैं, यह कोई प्रभाव नहीं क्या सॉफ्टवेयर कुछ साल से अधिक की 2038 ए 'निवेश पर वापसी "में करता है किसी के लिए असामान्य है सॉफ़्टवेयर प्रोजेक्ट, ताकि आप अपने नियोक्ता के लिए बहुत आगे सोच सकें, सॉफ़्टवेयर को जितनी जल्दी आगे बढ़ने के बजाए भेज दिया जाए।

एकमात्र आम अपवाद सॉफ्टवेयर है जिसे भविष्य की भविष्यवाणी करना है, 2038 बंधक उद्धरण प्रणाली के लिए पहले से ही एक समस्या है।

+1

+1 :) –

0

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

इसे ठीक करने के लिए, हमने 28 साल पहले कर्नेल की तारीख को वर्तमान दिनांक निर्धारित किया था। यह एक यादृच्छिक ऑफसेट नहीं है, 28 साल उत्साहजनक है कि सप्ताह के दिनों में फिर से मिलान करने में कितना समय लगेगा। उदाहरण के लिए मैं इसे गुरुवार को लिख रहा हूं और अगली बार मार्च 7 एक गुरुवार 28 साल में होगा।

इसके अलावा, हमारे सिस्टम पर तिथियों के साथ बातचीत करने वाले सभी एप्लिकेशन सिस्टम दिनांक (time_t) को कस्टम समय 64_t में परिवर्तित कर देंगे और 28 वर्ष की ऑफसेट सही तिथि पर लागू करेंगे।

हमने इसे संभालने के लिए एक कस्टम लाइब्रेरी बनाई है। हम जिस कोड का उपयोग कर रहे हैं वह इस पर आधारित है: https://github.com/android/platform_bionic

इस प्रकार, इस समाधान के साथ आप स्वयं को अतिरिक्त 28 वर्ष आसानी से खरीद सकते हैं।