जावा टाइम जोन गड़बड़ है

मैं एक टोमकैट एप्लिकेशन चला रहा हूं, और मुझे कुछ समय मूल्य प्रदर्शित करने की आवश्यकता है। दुर्भाग्यवश, समय एक घंटे दूर आ रहा है। मैंने इसमें देखा और पाया कि मेरा डिफ़ॉल्ट टाइमज़ोन इस पर सेट किया जा रहा है:

sun.util.calendar.ZoneInfo[id="GMT-08:00",
                           offset=-28800000,
                           dstSavings=0,
                           useDaylight=false,
                           transitions=0,
                           lastRule=null]

प्रशांत समय क्षेत्र की बजाय। यह तब संकेत दिया जाता है जब मैं डिफ़ॉल्ट समय क्षेत्र प्रदर्शन नाम , और यह "जीएमटी -08: 00" आता है, जो मुझे इंगित करता है कि यह यूएस प्रशांत समय क्षेत्र में सही ढंग से सेट नहीं है। मैं उबंटू हार्डी हेरॉन पर चल रहा हूं, जिसे गट्सी गिब्बन से अपग्रेड किया गया है।

क्या कोई कॉन्फ़िगरेशन फ़ाइल है जिसे मैं जेआरई को सभी संबंधित डेलाइट बचत समय की जानकारी के साथ प्रशांत का उपयोग करने के लिए कह सकता हूं? मेरी मशीन पर समय सही ढंग से दिखाता है, इसलिए यह एक ओएस-व्यापी गलत कॉन्फ़िगरेशन प्रतीत नहीं होता है।


ठीक है, यहाँ एक अद्यतन है। एक सहकर्मी ने सुझाव दिया कि मैं अपने / etc / प्रोफ़ाइल में JAVA_OPTS को "-Duser.timezone = यूएस / प्रशांत" शामिल करने के लिए अद्यतन करता हूं, जिसने काम किया (मैंने CATALINA_OPTS भी देखा, जिसे मैंने भी अपडेट किया)। असल में, मैंने नए / etc / प्रोफ़ाइल का उपयोग करने के बजाय चर में परिवर्तन को निर्यात किया है (बाद में रीबूट परिवर्तनों को उठाएगा और मैं सुनहरा होगा)।

हालांकि, मुझे अभी भी लगता है कि एक बेहतर समाधान है ... जावा के लिए कहीं कॉन्फ़िगरेशन होना चाहिए जो कहता है कि यह किस समय का उपयोग कर रहा है, या यह टाइमज़ोन को कैसे पकड़ रहा है। अगर कोई ऐसी सेटिंग जानता है, तो यह बहुत ही अच्छा होगा, लेकिन अभी के लिए यह एक सभ्य कामकाज है।


मैं 1.5 का उपयोग कर रहा हूं, और यह निश्चित रूप से एक डीएसटी समस्या है। जैसा कि आप देख सकते हैं, समय क्षेत्र डेलाइट बचत का उपयोग नहीं करने के लिए सेट है। मेरा विश्वास यह है कि यह सामान्य रूप से विशिष्ट प्रशांत टाइमज़ोन की बजाय -8 ऑफसेट पर सेट होता है। चूंकि जेनेरिक -8 ऑफसेट में डेलाइट बचत जानकारी नहीं है, इसलिए यह निश्चित रूप से इसका उपयोग नहीं कर रहा है, लेकिन सवाल यह है कि, जब मैं शुरू होता हूं तो प्रशांत समय क्षेत्र का उपयोग करने के लिए जावा कहां कहूं? मैं एक प्रोग्रामेटिक समाधान की तलाश नहीं कर रहा हूं, यह एक विन्यास समाधान होना चाहिए।

0
ro fr bn

4 उत्तर

यह आपके ओएस का उपयोग कर रहे समय क्षेत्र नियमों को दोबारा जांचने में मदद कर सकता है।

/usr/bin/zdump -v /etc/localtime | less

इस फ़ाइल में आपके डेलाइट सेविंग नियम होना चाहिए, जैसे कि वर्ष 2080 के लिए:

/etc/localtime  Sun Mar 31 01:00:00 2080 UTC = Sun Mar 31 02:00:00 2080 BST isdst=1 gmtoff=3600

आप उस समय क्षेत्र नियमों के साथ तुलना कर सकते हैं जो आपको लगता है कि आपको उपयोग करना चाहिए। वे / usr / share / zoneinfo / में पाए जा सकते हैं।

0
जोड़ा

जेवीएम जोनिनोफ़ फ़ाइल को देखता है, वैसे ही यह एक "क्विर्क" है। बग आईडी 6456628 देखें।

सबसे आसान कामकाज सही zinfo फ़ाइल में एक symlink / etc / localtime बनाने के लिए है। प्रशांत समय के लिए, निम्नलिखित आदेशों को काम करना चाहिए:

# sudo cp /etc/localtime /etc/localtime.dist
# sudo ln -fs /usr/share/zoneinfo/America/Los_Angeles /etc/localtime

मुझे सिम्लिंक दृष्टिकोण के साथ कोई समस्या नहीं है।

संपादित करें: आदेशों में "सुडो" जोड़ा गया।

0
जोड़ा
+1: मैं बस एक पूरी तरह से अद्यतन उबंटू 9.10 सर्वर पर इस में भाग गया। सूर्य जेडीके 1.6.0_15-बी03, सिस्टम यूएस / पूर्वी टाइमज़ोन के लिए स्थापना समय पर कॉन्फ़िगर किया गया है। / आदि / लोकलटाइम में / usr / share / zoneinfo / यूएस / पूर्वी की समान सामग्री शामिल है। जावा 15 मार्च, 2010 और 25 अप्रैल के बीच तिथियों के लिए गलत परिणाम उत्पन्न करता है। फ़ाइल को सिमलिंक के साथ / usr / share / zoneinfo / यूएस / पूर्वी में बदलने के बाद, अब मुझे सही परिणाम मिलते हैं। मुझे आश्चर्य है कि यह बग एक है) अभी भी खुला है, बी) एक पूरी तरह से अद्यतन उबंटू सर्वर (9 .10 - कर्मिक) को प्रभावित करता है।
जोड़ा लेखक Mark Renouf, स्रोत
बग जावा संस्करण 7 (बी 72) में बंद के रूप में जाना जाता है।
जोड़ा लेखक Raedwald, स्रोत
एक symlink करने के लिए / etc / localtime बदलना; आप अधिक आधुनिक लिनक्स सिस्टम में चीजों को तोड़ने की उम्मीद कर सकते हैं (उदाहरण के लिए, जब पैकेज अपग्रेड हो जाते हैं, या संभवतः स्टार्टअप पर - मुझे संदेह है कि फ़ाइल की प्रतिलिपि में सिमलिंक से बदलने का कारण स्टार्टअप अनुक्रम और निर्भरताओं के साथ करना होगा ( खासकर अगर / usr / एक अलग फाइल सिस्टम पर है)। मुझे टीजेड पर्यावरण चर सेट करने के लिए और अधिक उपयोगी लगता है।
जोड़ा लेखक Cameron Kerr, स्रोत

मेरे पास एक समान समस्या थी, संभवतः वही। हालांकि मेरा टॉमकैट सर्वर विंडोज़ बॉक्स पर चलता है इसलिए सिम्लिंक समाधान काम नहीं करेगा।

मैंने -Duser.timezone = ऑस्ट्रेलिया / सिडनी को JAVA_OPTS में सेट किया है, हालांकि टॉमकैट यह नहीं पहचान पाएगा कि डीएसटी प्रभावी था। एक कामकाज के रूप में मैंने <�कोड> ऑस्ट्रेलिया / सिडनी </कोड> (जीएमटी + 10: 00) प्रशांत / नुमा </कोड> (जीएमटी + 11: 00) में बदल दिया ताकि समय सही ढंग से प्रदर्शित हो जाए, हालांकि मैं प्यार करूंगा वास्तविक समाधान या बग, यदि कोई हो, जानने के लिए।

0
जोड़ा

उबंटू पर, बस / etc / localtime फ़ाइल को बदलने के लिए पर्याप्त नहीं है। ऐसा लगता है कि / etc / timezone फ़ाइल भी पढ़ी जाती है। समय क्षेत्र को सही तरीके से सेट करने के लिए यह बेहतर है निर्देश का पालन करें। विशेष रूप से, निम्न कार्य करें:

$ sudo cp /etc/timezone /etc/timezone.dist
$ echo "Australia/Adelaide" | sudo tee /etc/timezone
Australia/Adelaide
$ sudo dpkg-reconfigure --frontend noninteractive tzdata

Current default time zone: 'Australia/Adelaide'
Local time is now:      Sat May  8 21:19:24 CST 2010.
Universal Time is now:  Sat May  8 11:49:24 UTC 2010.

मेरे उबंटू पर, यदि / etc / localtime और / etc / timezone असंगत हैं, जावा / etc / timezone से डिफ़ॉल्ट समय क्षेत्र पढ़ना प्रतीत होता है।

0
जोड़ा
उबंटू 10.0.4 एलटीएस पर एक आकर्षण की तरह काम करता है। कुछ हद तक अच्छा है। मैं बस sudo dpkg-reconfigure tzdata भाग गया और अग्रभाग में सही टाइमज़ोन का चयन कर सकते हैं।
जोड़ा लेखक msung, स्रोत
लुबंटू 16.04 (gnome) में बस इस मुद्दे में भाग गया। यह समाधान एक आकर्षण की तरह काम किया।
जोड़ा लेखक 7yl4r, स्रोत
dpkg-reconfigure tzdata वही था जो मैं खोज रहा था। धन्यवाद!
जोड़ा लेखक Dinesh Reddy Parne, स्रोत