2013-04-05 7 views
8

मैं एक विंडोज़ मशीन पर एक जावा प्रोग्राम चलाता हूं। मैं समय क्षेत्र और उनकी संबंधित जानकारी की एक सूची प्राप्त करने की कोशिश कर रहा हूं।जावा सही समय क्षेत्र जानकारी का उत्पादन नहीं करता

String[] allTimeZones = TimeZone.getAvailableIDs(); 
    Date now = new Date(); 
    for (int i = 0; i < allTimeZones.length; i++) { 
     TimeZone tz = TimeZone.getTimeZone(allTimeZones[i]); 
     System.out.format("%s;%s; %f \n", 
          allTimeZones[i], 
          tz.getDisplayName(), 
          (float) (tz.getOffset(now.getTime())/3600000.0)); 
    } 

उत्पन्न समय क्षेत्र में से एक है निम्नलिखित जानकारी:: यहाँ पूरा कार्यक्रम है

America/New_York, पूर्वी मानक समय; -4.000000

यह परेशान है। इस समय, न्यूयॉर्क पूर्वी ग्रीष्मकालीन डेलाइट सेविंग टाइम में है। तो उपर्युक्त जानकारी सही नहीं है।

किसी को भी मैं कैसे

America/New_York उत्पन्न करने के लिए जावा कर सकते हैं पता है, पूर्वी मानक समय; -5,000000

या इस

America/New_York की तरह कुछ; पूर्वी ग्रीष्मकालीन डेलाइट सेविंग टाइम; -4.000000

मदद के लिए धन्यवाद!

सादर

+1

http://www.timeanddate.com/worldclock/city.html?n=179 –

+0

आप कैसे दुनिया में समय क्षेत्रों के सभी प्राप्त करने के लिए, या कैसे के लिए पूछ रहे हैं आपके स्थानीय कोड पर चल रहे कंप्यूटर के ओएस पर परिभाषित "स्थानीय समय" प्राप्त करने के लिए? –

+1

इसके अलावा, [जोडाटाइम] (http://joda-time.sourceforge.net/) देखें, जिसे समग्र रूप से बेहतर दिनांक/समय लाइब्रेरी माना जाता है। –

उत्तर

2

उपयोग getDisplayName(daylight, style), daylight के लिए true में गुजर। यह प्रिंट होगी:

America/New_York;Eastern Daylight Time; -4.000000 

लेकिन आप यह निर्धारित करने के लिए वर्तमान समय है या नहीं डेलाइट सेविंग टाइम में है होगा (या यह हमेशा "डेलाइट समय" वापस लौटा देंगे, यहां तक ​​कि गिरावट और सर्दियों में)। इस चाल करना चाहिए:

String[] allTimeZones = TimeZone.getAvailableIDs(); 
Date now = new Date(); 
for (int i = 0; i < allTimeZones.length; i++) { 
    TimeZone tz = TimeZone.getTimeZone(allTimeZones[i]); 
    System.out.format("%s;%s; %f \n", allTimeZones[i], 
      tz.getDisplayName(tz.inDaylightTime(now), TimeZone.LONG), 
      (float) (tz.getOffset(now.getTime())/3600000.0)); 
} 
+0

धन्यवाद। आप मेरे हीरो हैं! मैंने इसका परीक्षण किया। बस सुनिश्चित करें कि मैं इसे सही ढंग से समझता हूं। आपका कोड सही ढंग से निर्धारित करता है और प्रदर्शित करता है कि प्रत्येक जोन मानक या डेलाइट सेविंग टाइम और ऑफ़सेट में है या नहीं, सही है? – curious1

+0

वास्तव में, यह केवल आपके समय क्षेत्र के लिए काम कर सकता है; मैंने इसे व्यापक रूप से परीक्षण नहीं किया, लेकिन आप अपने कंप्यूटर पर समय क्षेत्र सेटिंग बदलकर और विभिन्न तिथियों को आजमा सकते हैं (उदाहरण के लिए, अमेरिका में डेलाइट बचत समय यूरोप में ग्रीष्मकालीन समय से पहले शुरू होता है, इसलिए उन तिथियों के आसपास परीक्षण करें)। यह भी ध्यान दें कि यदि आप डेलाइट बचत समय के संबंध में ऑफसेट चाहते हैं, तो tz.getRawOffset() (कोई तर्क के साथ) का उपयोग करें। उदाहरण के लिए, पूर्वी समय क्षेत्र में, जो वर्ष के दिन के बावजूद -5 घंटे वापस आ जाएगा। – Jimothy

+0

जिमोथी, मैंने अलग-अलग तिथियों और समय क्षेत्र की कोशिश की, ऐसा लगता है कि टाइमज़ोन और उनकी जानकारी की सूची सही है। फिर से धन्यवाद! – curious1

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