2011-05-26 10 views
8

मैं डेटाबेस से एक टेबल निकालने और इसे किसी अन्य प्रकार के डेटाबेस में पुनः लोड करने का प्रयास कर रहा हूं। समस्या यह है कि मेरी स्थानीय सेटिंग्स के साथ दिनांक 1 जुलाई 1 9 37 को 00:00:00 के समय टाइमस्टैम्प को प्राप्त करने की समस्या उत्पन्न होती है। नीदरलैंड्स में उन्होंने 1 9 37 में मेरिडियंस को बदल दिया क्योंकि जुलाई 1 9 37 के पहले 28 सेकंड पहले मौजूद नहीं थे।जावा गायब 28 सेकंड

जब मैं उत्पादन, तारीख से पहले या तो 28 सेकंड के लिए समय परिवर्तन पुन: प्रारूपित करना एक कैलेंडर में दिनांक पढ़ रहा हूँ; जून 30 वें 23:59:32 या जुलाई 1 00:00:28 (चालक के आधार पर) कोई भी इस समस्या के आसपास कामकाज जानता है?

http://themagicofscience.blogspot.com/2010/08/java-puzzler-1-july-1937.html

+0

यह बिल्कुल स्पष्ट नहीं कर रहा है क्या इनपुट और आउटपुट यहाँ हैं। क्या आप कुछ कोड पोस्ट कर सकते हैं? –

+1

आप वैध आउटपुट पर क्या विचार करेंगे? साथ ही, क्या आपको समय को स्थानीयकृत करना होगा, या आप यूटीसी का उपयोग कर सकते हैं? – atk

+1

आम तौर पर, यदि आपको उस स्तर की सटीकता की आवश्यकता होती है, तो आधुनिक सामान्य उद्देश्य समय प्रणाली पर्याप्त नहीं होगी। वे आम तौर पर 'प्रोलेप्टिक ग्रेगोरियन कैलेंडर' कहलाते हैं जो वर्तमान नियमों को पीछे की ओर लागू करता है। ऐसे मुद्दों को संभालने के लिए इसे एक बहुत ही विशेष प्रणाली की आवश्यकता होगी। युग थे जब कुछ देशों (और मुझे लगता है कि नीदरलैंड उनमें से एक है) जब जीएमटी से अपना समय ऑफसेट (यूटीसी केवल 1 9 72 में शुरू हुआ) को एक सेकंड का अंश शामिल किया गया था। यह 1 9 00 के दशक की शुरुआत में होता। –

उत्तर

3

कॉन्फ़िगर अपने Calendar एक अलग Locale उपयोग करने के लिए।

Calendar रों स्थानीय समय में इनकोडिंग समय अनुवाद करते हैं। उन 20+ सेकंड्स Locale में अलग-अलग डिस्प्ले प्रारूपों के साथ मौजूद नहीं हैं, इसलिए यदि आप Locale को रखने पर जोर देते हैं, और आप सेकंड्स सेट के साथ दिनांक प्रदर्शित करने पर जोर देते हैं, तो आपको इसे 1 9 37 में डच सरकार के साथ ले जाना होगा ; हालांकि, यदि आप अलग-अलग Locale पर डिस्प्ले स्वरूपण को बदलते हैं, तो आप पाएंगे कि अंतर्निहित समय डेटा संरचना का वास्तविक मूल्य नहीं बदला गया था, यह उन स्थानों में अलग-अलग समय को हल करेगा जिनके पास अलग-अलग सेकंड मान प्रदर्शित होते हैं।

केवल चेतावनियां है कि आप इसे पढ़ रहे हैं और भंडारण के बीच के समय में हेरफेर करना चाहिए, तो आप अनजाने में, एक नया Time या Calendar वस्तु बनाने के हो सकता है सेट या Locale स्वरूपित का अनुवाद के आधार पर उसके अंतर्निहित डेटा संरचनाओं रीसेट होता है अंतर्निहित डेटा प्रतिनिधित्व में समय।

यही कारण है कि यह सबसे अच्छा है थोक दिनांक और समय UTC में से निपटने को संभालने के लिए है, डेलाइट सेविंग के बिना। भले ही समय स्थानीय समय तक मेल नहीं खाते (और अलग-अलग समय क्षेत्रों में लोगों के लिए पढ़ना कठिन होता है), यूटीसी के हर दूसरे भाग मौजूद हैं, इसलिए सरल +5 दूसरे परिवर्तनों को तुरंत प्रभावित किए गए सरल स्वरूपण द्वारा सत्यापित किया जा सकता है पहर।

से निपटने की इस तरह के साथ ही चेतावनी है कि बाद में, आप हमेशा UTC समय वापस प्रदर्शन के लिए स्थानीय समय में अनुवाद होना चाहिए। अपने दर्शकों की शिक्षा के आधार पर, कुछ डच यह जानकर आश्चर्यचकित हो सकते हैं कि उनकी सरकार ने ऐसे सेकंडों को अस्तित्व में रखने की अनुमति नहीं दी है और मांग कर सकते हैं कि वे इस फैसले के बावजूद दिखाए गए हैं कि ऐसे सेकंड डच कैलेंडर का हिस्सा नहीं हैं।

बस जब तक आप में 1582

+0

यूटीसी में हेरफेर करना मेरे लिए सबसे अच्छा समाधान लगता है। हालांकि, क्या अन्य टाइमज़ोन एक ही समस्या पैदा करते हैं, शायद थोड़ा अलग तरीके से? – ferdyh

+0

यह वास्तव में समय क्षेत्र नहीं है जो मुद्दा है, यह समय क्षेत्र के साथ संयुक्त लोकेल है। अन्य लोकेशंस वर्तमान मुद्दों (शायद ही कभी) होते हैं, लेकिन वे विवरण में अलग-अलग होते हैं, हालांकि इस तथ्य के समान कि एक सरकारी कार्रवाई ने फैसला किया कि वांछित उद्देश्य से कैलेंडर को संरेखित करने के लिए कुछ बदलाव की आवश्यकता थी। –

+0

क्या कोई कैलेंडर ऑब्जेक्ट नहीं है जो पूरी तरह से लोकेल को अनदेखा करता है? – ferdyh

0

सरल शायद उन विशिष्ट समय के लिए सरल जांच और तारीख के हिसाब से बदलने के लिए किया जाएगा।

0

कोशिश वापस लापता दिनों की खोज प्रतीक्षा करें और जीएमटी या यूटीसी में दिनांक निकालने, फिर उन्हें है कि रास्ते में वापस लोड। फिर आप मूल प्रणाली की बजाय लोकेल के लिए नई प्रणाली के विवरण का उपयोग करेंगे।

1

जावा में, एक समय को समय-क्षेत्र स्वतंत्र तरीके से आंतरिक रूप से संग्रहीत किया जाता है। (यह मिलीसेकंड की संख्या के रूप में संग्रहीत है - मैं शुरुआती तारीख भूल गया, क्या यह 1 जनवरी, 1 9 70 जीएमटी था?) जब आप एक तिथि आउटपुट करते हैं, तो उसे समय क्षेत्र को ध्यान में रखना होता है। लेकिन किसी भी आंतरिक कुशलता से कोई फर्क नहीं पड़ता। आपने यह नहीं कहा कि आप किस डेटाबेस इंजन का उपयोग कर रहे हैं, इसलिए मुझे नहीं पता कि यह तिथियां कैसे संग्रहीत करता है। मैं ज्यादातर इन दिनों पोस्टग्रेस के साथ काम कर रहा हूं, जो जीएमटी में सभी तिथियों को स्टोर करता है और इनपुट और आउटपुट समय पर उपयुक्त समय क्षेत्र में और उससे बदलता है।

तो अगर आप सिर्फ जीएमटी करने के लिए अपने समय क्षेत्र सेट है, तो समय क्षेत्र सीमाओं, डेलाइट सेविंग टाइम, आदि जाने के लिए किसी भी परिवर्तन अप्रासंगिक होना चाहिए।

+0

एफवाईआई, 32-बिट हस्ताक्षरित समय (सेकेंड में) का उपयोग करके 1 901-12-13 से 2038-01-19 तक एक सीमा शामिल है। यदि आपके पास अन्य विकल्प हैं, उदा। 64-बिट एमएस, इसके बजाए इसका इस्तेमाल करें। – karmakaze

+0

मैं सिर्फ वह स्रोत जाँच: जावा दिनांक वर्ग भंडार समय एक लंबे पूर्णांक के रूप में (64 बिट) मिलीसेकेंड की संख्या 1 जनवरी 1970 यही कारण है कि संभाल चाहिए ... त्वरित गणना ... के बारे में 292 मिलियन साल के अंतराल के बाद या तो मार्ग। सूर्य और ओरेकल को कोई अपराध नहीं, लेकिन मुझे लगता है कि जावा शायद 2 9 0 मिलियन वर्षों में उपयोग में नहीं होगा। मैं लगभग 280 मिलियन वर्षों में एक बड़ी तिथि क्षेत्र में एक संक्रमण रणनीति के बारे में चिंता करना शुरू कर दूंगा। इसे योजना बनाने और इसे लागू करने के लिए पर्याप्त समय देना चाहिए। – Jay

+0

लेकिन गंभीरता से लोग, इस दिन और उम्र में कोई भी समय टाइप करने वाले व्यक्ति को कम से कम 14 अरब साल पहले बड़ी धमाके में और कम से कम इतना अधिक, या अधिक ... को कवर करने में सक्षम होना चाहिए ... – karmakaze

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