2009-09-19 11 views
15

मैं जावा में सबसे आसान तरीका जानना चाहता हूं, भविष्य में तिथियों की सूची प्राप्त करने के लिए जहां डेलाइट बचत समय बदल जाएगा।जावा में समय क्षेत्र के लिए डेलाइट सेविंग ट्रांजिशन तिथियां प्राप्त करें

ऐसा करने का एक और शानदार तरीका यह है कि टाइमज़ोन.in डेलाइटटाइम() के खिलाफ उनका परीक्षण करने के लिए वर्षों के लायक दिनों में एक गुच्छा को फिर से शुरू करना होगा। यह काम करेगा, और मैं दक्षता के बारे में चिंतित नहीं हूं क्योंकि यह हर बार मेरा ऐप शुरू होने पर ही चलने की आवश्यकता होगी, लेकिन मुझे आश्चर्य है कि क्या कोई आसान तरीका है।

यदि आप सोच रहे हैं कि मैं ऐसा क्यों कर रहा हूं, तो ऐसा इसलिए है क्योंकि मेरे पास जावास्क्रिप्ट ऐप है जिसे यूटीसी टाइमस्टैम्प वाले तृतीय-पक्ष डेटा को संभालने की आवश्यकता है। मैं ग्राहक पक्ष पर जीएमटी से ईएसटी तक अनुवाद करने का एक विश्वसनीय तरीका चाहता हूं। Javascript -- Unix Time to Specific Time Zone देखें मैंने कुछ जावास्क्रिप्ट लिखा है जो यह करेगा, लेकिन मैं सर्वर से सटीक संक्रमण तिथियां प्राप्त करना चाहता हूं।

+2

इस प्रश्न को देखें: http://stackoverflow.com/questions/581581/find-dst-transition-timestamp-with-java-util-timezone –

उत्तर

28

Joda Time (जैसा कि हमेशा) DateTimeZone.nextTransition विधि के कारण यह वास्तव में आसान बनाता है। उदाहरण के लिए:

import org.joda.time.*; 
import org.joda.time.format.*; 

public class Test 
{  
    public static void main(String[] args) 
    { 
     DateTimeZone zone = DateTimeZone.forID("Europe/London");   
     DateTimeFormatter format = DateTimeFormat.mediumDateTime(); 

     long current = System.currentTimeMillis(); 
     for (int i=0; i < 100; i++) 
     { 
      long next = zone.nextTransition(current); 
      if (current == next) 
      { 
       break; 
      } 
      System.out.println (format.print(next) + " Into DST? " 
           + !zone.isStandardOffset(next)); 
      current = next; 
     } 
    } 
} 

आउटपुट:

 
25-Oct-2009 01:00:00 Into DST? false 
28-Mar-2010 02:00:00 Into DST? true 
31-Oct-2010 01:00:00 Into DST? false 
27-Mar-2011 02:00:00 Into DST? true 
30-Oct-2011 01:00:00 Into DST? false 
25-Mar-2012 02:00:00 Into DST? true 
28-Oct-2012 01:00:00 Into DST? false 
31-Mar-2013 02:00:00 Into DST? true 
27-Oct-2013 01:00:00 Into DST? false 
30-Mar-2014 02:00:00 Into DST? true 
26-Oct-2014 01:00:00 Into DST? false 
29-Mar-2015 02:00:00 Into DST? true 
25-Oct-2015 01:00:00 Into DST? false 
... 

जावा 8 के साथ, आप अपने nextTransition और previousTransition तरीकों के साथ ZoneRules का उपयोग कर एक ही जानकारी मिल सकती है।

+0

+1 'नमूना आने' विचार के साथ +1 (साथ ही शेष उत्तर का, ज़ाहिर है) – akf

+0

बेशक, प्रोजेक्टिंग जो बहुत आगे है वह बहुत सट्टा है। यूएस हाल ही में डीएसटी तिथियों के साथ tinkered है, और फिर से। – brianary

+0

इस साल पहली डीएसटी संक्रमण तिथि 14 मार्च 2010 है (जो कुछ दिन पहले हुई थी)। लेकिन आपकी स्क्रिप्ट 28-मार्च -2010 को निर्दिष्ट करती है। क्या मैं कुछ भूल रहा हूँ ? –

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