2012-06-14 16 views
6

मैं एक जावा ग्रेगोरियन कैलेंडर के साथ एक अजीब समस्या है:जावा ग्रेगोरी कैलेंडर समय-क्षेत्र

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:S Z"); 
sdf.setTimeZone(TimeZone.getTimeZone("US/Pacific")); 

GregorianCalendar cal1 = new GregorianCalendar(TimeZone.getTimeZone("US/Pacific")); 
cal1.setTimeInMillis(1320566400000L); 

GregorianCalendar cal2 = new GregorianCalendar(TimeZone.getTimeZone("US/Pacific")); 
cal2.setTimeInMillis(1320570000000L); 

System.out.println(sdf.format(cal1.getTime())); 
System.out.println(sdf.format(cal2.getTime())); 

मैं डिफ़ॉल्ट समय क्षेत्र = अमेरिका प्रशांत के साथ एक मशीन पर ऊपर दिए गए कोड निष्पादित, लेकिन मशीन जर्मनी में चल रहा है।

परिणाम निम्नलिखित है:

2011-11-06 01:00:00:0 -0700 
2011-11-06 01:00:00:0 -0800 

मैं सच में समझ में नहीं आता, क्यों परिणाम में एक अलग समय क्षेत्र है वहाँ ... मैं भी कोड किसी अन्य मशीन पर परीक्षण (डिफ़ॉल्ट समय-क्षेत्र = जीएमटी) और यह सही काम करता है।

क्या किसी के पास कोई विचार है, यह समस्या क्यों होती है?

बेस्ट, माइकल

+0

जावा के विच संस्करण के कारण हो सकता है? ;-) कभी-कभी एक संस्करण में बग हैं और दूसरों में नहीं। – reporter

+0

मैं जावा 1.6 का उपयोग करता हूं। – Michael

उत्तर

5

अपने कार्यक्रम में ये पंक्तियां जोड़ें सलाह होगा:

for (int i=0; i<24; i++) { 
    cal1.add(Calendar.MINUTE, i*5); 
    System.out.println(" : " + sdf.format(cal1.getTime())); 
} 

और आप देखेंगे:

: 2011-11-06 01:00:00:0 -0700 
: 2011-11-06 01:05:00:0 -0700 
: 2011-11-06 01:15:00:0 -0700 
: 2011-11-06 01:30:00:0 -0700 
: 2011-11-06 01:50:00:0 -0700 
: 2011-11-06 01:15:00:0 -0800 
: 2011-11-06 01:45:00:0 -0800 
: 2011-11-06 02:20:00:0 -0800 
: 2011-11-06 03:00:00:0 -0800 

तो ऐसा लगता है कि आप सर्दियों के समय में ग्रीष्मकालीन समय बदल रहे हैं। मेरा टाइमज़ोन सीईटी (यूटीसी + 01: 00) है, इसलिए मैं नहीं बता सकता कि यह आपकी दूसरी मशीन पर क्यों काम कर रहा है।

+0

डेलाइट सेविंग टाइम के साथ जानकारी के लिए धन्यवाद। जर्मनी में डेलाइट सेविंग टाइम का परिवर्तन एक हफ्ते बाद है - इसलिए मैंने इसके बारे में सोचा नहीं :) – Michael

2

6 नवंबर, 2011 था जब अमेरिका में डेलाइट बचत का समय समाप्त हो गया था। तो आप जो देख रहे हैं वह घड़ी 6 नवंबर को 2 बजे हिट होती है और फिर यह मानक समय के लिए एक घंटा वापस गिरने के लिए 1 बजे तक वापस आती है। इसलिए ऑफसेट भी जीएमटी से -7 से -8 में बदलता है, मैं प्रशांत समय के लिए विश्वास करता हूं। तो यह मैं जो देख सकता हूं उससे ठीक से काम कर रहा है।

0

कृपया अपने नियंत्रण कक्ष में जांचें कि आपने समर के समय को सक्रिय नहीं किया है। यह बग इस