2009-11-13 8 views
5

हमने "समन्वयित सार्वभौमिक समय" समय क्षेत्र सहित कुछ विंडोज एक्सपी मशीनों पर एक अजीब मुद्दा देखा है। नहीं सभी Windows XP मशीनों यह है लगता है, लेकिन उन है कि करते हैं, निम्नलिखित सरल जावा प्रोग्राम परजावा में समन्वयित सार्वभौमिक समय समय क्षेत्र चुनते समय जावा जीएमटी-4.5 में एक तिथि क्यों लौटाता है?

public class TimeTest { 
    public static void main(String[] args) { 
     System.out.println(java.util.TimeZone.getDefault()); 
     System.out.println(new java.util.Date()); 
    } 
} 
JDK 1.6.0_06 प्रिंट पर

:

 
sun.util.calendar.ZoneInfo[id="America/Caracas",offset=-16200000,dstSavings=0,useDaylight=false,transitions=5,lastRule=null] 
Fri Nov 13 05:34:14 VET 2009 

(यानी 4 और एक आधे घंटे के पीछे GMT)। मुझे यह जोड़ना चाहिए कि मैं लंदन में स्थित हूं, और कभी दक्षिण अमेरिका नहीं रहा हूं। :-)

मेरे प्रश्न हैं:

  • कहाँ जावा से इस समय ज़ोन प्राप्त करता है? मैंने सोचा कि समन्वयित सार्वभौमिक समय जीएमटी के लिए नया नाम माना जाना चाहिए था।
  • कुछ विंडोज मशीनों में इस समय क्षेत्र क्यों है लेकिन दूसरों को नहीं?
+1

यह भी देखें http://stackoverflow.com/questions/2106525/java-incorrect-timezone – Vadzim

उत्तर

0

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

java.util.TimeZone.getDefault प्रिंट करें और मुझे संदेह है कि आप समस्या के साथ मशीनों पर वीईटी देखेंगे। बिल्ट-इन Date/Calendar कक्षाएं

आप अपने कोड यूटीसी का उपयोग करना चाहते हैं, तो आप स्पष्ट रूप से वह निर्दिष्ट करना चाहिए ... अधिमानतः बजाय Joda Time का उपयोग कर।

संपादित करें:

using System; 

class Test 
{ 
    static void Main() 
    { 
     Console.WriteLine(TimeZoneInfo.Local.DisplayName); 
    } 
} 
+0

"चुनने" से, मेरा मतलब यह है कि इसे प्रोग्राम पैनल के बजाय नियंत्रण कक्ष/दिनांक और समय/समय क्षेत्र में चुनना है। जब मैं इसे नियंत्रण कक्ष में अन्य मानों में बदलता हूं, तो जावा डिफ़ॉल्ट समय क्षेत्र के बारे में अपना विचार बदलता प्रतीत होता है, लेकिन यह इस मान के लिए बेतुका लगता है। –

+0

ठीक है, उस मामले में यह बहुत अजीब है। क्या जावा के समान संस्करण का उपयोग कर सभी मशीनें (काम नहीं कर रही हैं)? –

+0

मुझे केवल दो विंडोज एक्सपी मशीनें मिली हैं जिनमें नियंत्रण कक्ष में यूटीसी समय क्षेत्र है। दोनों 1.6.0_06 का उपयोग कर रहे थे। 1.5.0_12 पर एक ही कोड को चलाने से एक अलग विषम समय क्षेत्र मिलता है!(ACT = America/Rio_Branco, GMT-05) –

0

मैं एक यूनिक्स/सोलारिस में एक ही समस्या है: आप एक ही मशीन पर .NET 3.5 है, तो क्या यह सोचता है कि समय क्षेत्र है देखने के लिए इस छोटे से कार्यक्रम की कोशिश । डेट कमांड एक टाइम/ज़ोम वैरिएबल का उपयोग करता है जब इन "डेट-यू 042315232010" जैसे कॉमांड। यदि आप पैरामीटर का उपयोग करते हैं- क्योंकि कॉमांड डेट टीजेड नामक एक चर का उपयोग करती है और यह टीजेड में उन लोगों के खिलाफ जीएमटी समय समायोजित करने की प्रक्रिया है। इन्हें हल करने के लिए कॉमांड "दिनांक 042315232010" का उपयोग करें और सभी ने काम किया। शायद आपको अपने जावा प्रोग्राम में टाइमज़ोन वाक्यों से बचना चाहिए। जिस तरह से "दिनांक 042315232010" का अर्थ है "शुक्र अप्रैल 23 15:23:00 वीईटी 2010"।

3

मैंने जावा का अनुभव वेनेज़ुएला मानक समय (वीईटी) का समय क्षेत्र देखकर किया, भले ही विंडोज प्रशांत के लिए सेट किया गया हो। यह एक नए क्लोन वीएमवेयर बॉक्स पर था। एक बार जब मैंने पैसिफ़िक से समय क्षेत्र को कुछ और बदल दिया, इसे सहेजा, इसे वापस प्रशांत में बदल दिया, इसे सहेजा, फिर मेरे जावा एप्लिकेशन को पुनरारंभ किया, जावा ने सही समय क्षेत्र को पहचाना।

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