2015-06-10 4 views
5

में सत्य नहीं है, मुझे कई तिथियों को प्रदर्शित करने में समस्या है जो लंबे समय तक संग्रहीत हैं। मैं उस कन्स्ट्रक्टर के साथ डेट ऑब्जेक्ट्स बनाता हूं जो लंबी तर्क लेता है, और उसके बाद तारीखों को पीडीएफ फ़ाइल में प्रिंट करता है।पुरानी तारीखों को गर्मियों के समय के रूप में पार्स किया जाता है, भले ही यह जावा

हालांकि, विंडोज़ की तुलना में लिनक्स पर प्रोग्राम चलाते समय मुझे पुरानी तिथियों में समस्या है।

इस तिथि को लें: 25. अप्रैल 1 9 76 00:00:00 (लंबा मूल्य: 199231200000 एल) उदाहरण के लिए। अगर मैं एक dateformater का उपयोग तारीख को प्रदर्शित करने के लिए, यह लिनक्स और विंडोज पर अलग ढंग से प्रदर्शित करेगा:

विंडोज पर: 25 अप्रैल 1976 00:00:00 CEST

लिनक्स पर: 24. अप्रैल 1976 23:00 : 00 सीईटी

टेक्स्ट प्रतिनिधि। निम्न पंक्ति चलाकर बस दिखाया जा सकता है:

DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL).format(new Date(199231200000L)) 

मैं Joda Time इस्तेमाल किया इस परीक्षण के लिए DATEVALUE पाने के लिए:

new org.joda.time.DateTime().withDate(1976, 4, 25).withTime(0, 0, 0, 0).toDate().getTime() 

क्यों विंडोज CEST के रूप में उत्पादन दिखाता है, और सीईटी के रूप में लिनक्स?

+2

कौन सा * सटीक * समय क्षेत्र आप में हैं? (भौतिक रूप से आप कहां हैं?) 'टाइमज़ोन.getDefault()। GetID()' लिनक्स और विंडोज़ पर प्रत्येक पर क्या दिखाता है? मुझे संदेह है कि आपकी दो मशीनों को अलग-अलग कॉन्फ़िगर किया गया है ... –

+2

पेरिस में मध्यरात्रि उस समय तत्काल (सीईएसटी) पर था लेकिन सीईटी में 23:00 बजे था। तो दोनों परिणाम सही हैं और आउटपुट आपकी मशीन के टाइमज़ोन पर निर्भर करता है। – assylias

+0

एचएम - खिड़कियां यूरोप/पेरिस कहती हैं और लिनक्स यूरोप/कोपेनहेगन कहते हैं। (मैं denmark में हूँ) तो यह समझाने के लिए लगता है। लेकिन विंडोज़ पीसी पर टाइमज़ोन सेटिंग्स में, कोपेनहेगन और पेरिस के बीच कोई अंतर नहीं है - उन्हें एक (यूटीसी +01) –

उत्तर

2

France ने 1 9 76 में गर्मी के समय की शुरुआत की है, लेकिन Denmark ने 1 9 80 में डीएसटी शुरू किया था। यह आपके द्वारा देखे गए मतभेदों को बताता है, इसलिए इस तथ्य को छोड़कर कि आपका सिस्टम टाइमज़ोन अलग है। आपको दोनों मशीनों पर एक ही स्पष्ट टाइमज़ोन का बेहतर उपयोग करना चाहिए और डिफ़ॉल्ट टाइमज़ोन पर भरोसा नहीं करना चाहिए।

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

+0

ऐसा लगता है कि मेरे पास कुछ पुनर्लेखन है। वर्तमान में हम डेट ऑब्जेक्ट क्लाइंटसाइड बनाते हैं और इसे सर्वर पर भेजते हैं - बिना टाइमज़ोन जानकारी के। ऐसा लगता है कि यह सर्वोत्तम अभ्यास दिनांक सर्वरसाइड बनाना होगा। –

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

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