2008-08-08 28 views
26

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

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

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

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


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

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


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

उत्तर

20

जेवीएम जोनिनोफ़ फ़ाइल को देखता है, यह एक "क्विर्क" है। Bug ID 6456628 देखें।

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

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

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

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

+0

+1: मैं बस इसे पूरी तरह अद्यतन उबंटू 9 .10 सर्वर पर चला गया। सूर्य जेडीके 1.6.0_15-बी03, सिस्टम यूएस/पूर्वी टाइमज़ोन के लिए स्थापना समय पर कॉन्फ़िगर किया गया है।/आदि/लोकलटाइम में/usr/share/zoneinfo/यूएस/पूर्वी की समान सामग्री शामिल है। जावा 15 मार्च, 2010 और 25 अप्रैल के बीच तिथियों के लिए गलत परिणाम उत्पन्न करता है। फ़ाइल को सिमलिंक के साथ/usr/share/zoneinfo/यूएस/पूर्वी में बदलने के बाद, अब मुझे सही परिणाम मिलते हैं। मुझे आश्चर्य है कि यह बग एक है) अभी भी खुला है, बी) पूरी तरह से अद्यतन उबंटू सर्वर (9 .10 - कर्मिक) को प्रभावित करता है। –

+0

बग जावा संस्करण 7 (बी 72) में बंद के रूप में नोट किया गया है। – Raedwald

+0

एक symlink करने के लिए/etc/localtime बदल रहा है; आप अधिक आधुनिक लिनक्स सिस्टम में चीजों को तोड़ने की उम्मीद कर सकते हैं (उदाहरण के लिए, जब पैकेज अपग्रेड हो जाते हैं, या संभवतः स्टार्टअप पर - मुझे संदेह है कि फ़ाइल की प्रतिलिपि में सिमलिंक से बदलने का कारण स्टार्टअप अनुक्रम और निर्भरताओं के साथ करना होगा (विशेष रूप से यदि/usr/एक अलग फाइल सिस्टम पर है) मुझे टीजेड पर्यावरण चर सेट करने के लिए और अधिक उपयोगी लगता है। –

0

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

/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/ में पाए जा सकते हैं।

1

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

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

22

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

$ 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/स्थानीयसमय और/etc/समय क्षेत्र पर, जावा से/etc/समय क्षेत्र डिफ़ॉल्ट समय क्षेत्र को पढ़ने के लिए लगता है।

+0

उबंटू 10.0.4 एलटीएस पर एक आकर्षण की तरह काम करता है। कुछ हद तक अच्छा है। मैं बस सुडो डीपीकेजी-पुनर्गठन tzdata भाग गया और फ्रंटएंड में सही टाइमज़ोन का चयन कर सकते हैं। – msung

+0

dpkg-reconfigure tzdata ठीक वही था जो मैं ढूंढ रहा था। धन्यवाद! –

+0

लुबंटू 16.04 (gnome) में बस इस मुद्दे में भाग गया। यह समाधान एक आकर्षण की तरह काम करता था। – 7yl4r