2010-06-04 9 views
37

मेरे पास एक वेब ऐप है जो टाइमस्टैम्प का उपयोग करके सामान ऑर्डर करता है, जो कि बस एक लंबा है। मेरे वेब एप्लिकेशन बैकएंड जावा में लिखा होना करने के लिए होता है, इसलिए मैं उपयोग कर रहा हूँ:System.currentTimeMillis() ओवरफ़्लो कब होगा?

long timestamp = System.currentTimeMillis(); 

क्या साल (लगभग) इस असफल हो जायेगी? मेरा मतलब है कि किसी बिंदु पर, लंबे समय तक की सीमा बहती जा रही है, है ना? हम सभी लंबे समय से मर सकते हैं, लेकिन मैं सिर्फ उत्सुक हूँ। क्या यह फिर से y2k की तरह होगा? इसके लिए तैयार करने के लिए मैं क्या कर सकता हूं? हास्यास्पद, मुझे पता है, बस उत्सुक!

धन्यवाद

उत्तर

85

यह

System.out.println(new Date(Long.MAX_VALUE)); 

जो

Sun Aug 17 03:12:55 GMT-04:00 292278994 

से अधिक 292 मिलियन साल थोड़ा के बाद इस प्रकार है कि प्रिंट में अतिप्रवाह होगा। मैं कहूंगा, इस बीच एक समाधान का आविष्कार करने के लिए बहुत है। ईमानदार होने के लिए, मैं उम्मीद नहीं करता कि मानवता इस से बचें। age of the world की तुलना में हम घंटों में केवल कुछ सेकंड मौजूद हैं और इसमें अधिक समय नहीं लगेगा।

enter image description here

+0

@ फ़ारबोड: मुझे नहीं पता कि आप किस बात का जिक्र कर रहे हैं। यह अभी तक 2 9 2278 99 4 अगस्त नहीं है। – BalusC

5

एक जावा long का अधिकतम मान 2^63 - 1 है, और यदि आप समय के व्यावहारिक इकाइयों में है कि कई मिलीसेकेंड कनवर्ट करते हैं, आप पाते हैं कि काउंटर में लगभग 290 मिलियन वर्ष अतिप्रवाह होगा। तो इसके बारे में चिंता न करें ;-) यदि कोई भी कंप्यूटर चलाने के लिए अभी भी आसपास है, तो मुझे यकीन है कि वे तब तक 128-बिट टाइम काउंटर पर स्विच कर लेंगे (या एक नया युग चुना)।

10

इस कोड को चलाने की कोशिश करें:

System.out.println(new Date(Long.MAX_VALUE)); 

कौन सा यह आपके स्थान के आधार की तरह कुछ प्रिंट: भविष्य में बहुत लंबे

Sun Aug 17 17:12:55 EST 292278994 

, तो अतिप्रवाह के बारे में चिंता करने की कोई जरूरत।

7

"इसके लिए तैयार करने के लिए मैं क्या कर सकता हूं?"

ठीक है, आप अपने ताबूत को नवीनतम और महानतम आईटी गियर/गीक खिलौनों के साथ निकाल सकते हैं। लेकिन किसी भी तरह से मुझे लगता है कि वे 2 9 2,278,994 ईस्वी में थोड़ा "पुराना" होंगे। और तब तक आप उनके साथ बहुत ऊब जाएंगे।

आपको याद है, आपके पास 128 बिट घड़ी का उपयोग करने के लिए ओएस को फिर से लिखने के लिए पर्याप्त समय होगा। यह समय को दूर करने के लिए एक मजेदार परियोजना की तरह लगता है। :-)

7

ऐसा लगता है कि आपका वेब ऐप अभी भी सूर्य 17 अगस्त 17:12:55 ईएसटी 2 9 2278994 (दूसरों द्वारा गणना के अनुसार) पर होगा। ऐसा लगता है कि फिर भी आप वेब ऐप के लिए ज़िम्मेदार होंगे। (यदि आप इसके लिए अभी भी ज़िम्मेदार हैं, तो आपको भविष्य में उच्च दर पर भुगतान किया जाएगा, इसलिए इसे अभी स्लाइड करें और बाद में बड़ी रकम एकत्र करें :)

यह बहुत अधिक संभावना है कि सिस्टम घड़ी कुछ अपमानजनक मूल्य के लिए गलत तरीके से सेट है।नीचे

long reasonableDate () 
{ 
    long timestamp = System.currentTimeMillis(); 
    assert timestamp after 2010AD : "We developed this web app in 2010. Maybe the clock is off." ; 
    assert timestamp before 10000AD : "We don't anticipate this web app will still be in operation in 10000AD. Maybe the clock is off." ; 
    return (timestamp) ; 
} 

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

0

इन उत्तरों में गलती मानते हुए किया जाता है कि प्रणाली द्वारा चलाए जा रहे 64 बिट है और लिनक्स एक 32 बिट प्रतिनिधित्व का उपयोग करता है और अतिप्रवाह में 2038

देखें Year 2038 problem है 1970 के बाद मिली सेकंड के एक 64 बिट प्रतिनिधित्व रिटर्न संदर्भ

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