java जावा में टाइमज़ोन का उपयोग करके डेलाइट बचत से कैसे निपटें




date calendar (4)

अन्य उत्तरों सही हैं, खासकर जॉन स्कीट द्वारा , लेकिन पुराना है।

java.time

जावा 8 और बाद में बनाए गए java.time फ्रेमवर्क द्वारा इन पुरानी डेट-टाइम कक्षाओं की आपूर्ति की गई है।

यदि आप बस यूटीसी में वर्तमान समय चाहते हैं, तो Instant कक्षा का उपयोग करें।

Instant now = Instant.now();

EST एक समय क्षेत्र नहीं है, जैसा कि जॉन स्कीट द्वारा सही उत्तर में बताया गया है। ऐसे 3-4 अक्षर कोड न तो मानकीकृत हैं और न ही अद्वितीय हैं, और आगे डेलाइट सेविंग टाइम (डीएसटी) पर भ्रम हैं। "महाद्वीप / क्षेत्र" प्रारूप में उचित समय क्षेत्र का नाम उपयोग करें।

शायद आप उत्तरी अमेरिका के पूर्वी तट में पूर्वी मानक समय का मतलब था? या मिस्र मानक समय? या यूरोपीय मानक समय?

ZoneId zoneId = ZoneId.of( "America/New_York" );
ZoneId zoneId = ZoneId.of( "Africa/Cairo" );
ZoneId zoneId = ZoneId.of( "Europe/Lisbon" );

ZoneId ऑब्जेक्ट का उत्पादन करने के लिए किसी विशेष समय क्षेत्र में समायोजित वर्तमान पल प्राप्त करने के लिए ऐसी किसी भी ZoneId ऑब्जेक्ट का उपयोग करें।

ZonedDateTime zdt = ZonedDateTime.now( zoneId ) ;

पहले से एक और ZonedDateTime ऑब्जेक्ट का उत्पादन करके ZonedDateTime को एक अलग समय क्षेत्र में समायोजित करें। जावा.टाइम फ्रेमवर्क मौजूदा वस्तुओं को बदलने (म्यूटेट करने) के बजाय अपरिवर्तनीय वस्तुओं का उपयोग करता है।

ZonedDateTime zdtGuam = zdt.withZoneSameInstant( ZoneId.of( "Pacific/Guam" ) ) ;

https://code.i-harness.com

मुझे अपने जावा एप्लिकेशन में ईएसटी समय प्रिंट करना होगा। मैंने समय क्षेत्र को ईएसटी का उपयोग करके सेट किया था:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("EST"));

लेकिन जब इस टाइमज़ोन में डेलाइट बचत का पालन किया जा रहा है, तो मेरा कोड सही समय प्रिंट नहीं करता है (यह 1 घंटे कम प्रिंट करता है)।

सही समय को पढ़ने के लिए कोड को कैसे काम करना है, भले ही डेलाइट बचत देखी जा रही हो या नहीं?

पीएस: मैंने टाइमज़ोन को ईडीटी में सेट करने का प्रयास किया, लेकिन यह समस्या का समाधान नहीं करता है।


इस answer अनुसार:

TimeZone tz = TimeZone.getTimeZone("EST");
boolean inDs = tz.inDaylightTime(new Date());

जावा में, डेटफॉर्मेटर डिफ़ॉल्ट रूप से डीएसटी का उपयोग करता है, दिन की रोशनी से बचने के लिए (डीएसटी) आपको मैन्युअल रूप से एक चाल करने की आवश्यकता होती है,
सबसे पहले आपको डीएसटी ऑफसेट प्राप्त करना होगा यानी कितने मिलीसेकंद डीएसटी लागू किया गया है, पूर्व में डीएसटी 45 ​​मिनट के लिए भी है और कुछ स्थानों के लिए यह 30 मिनट के लिए है
लेकिन ज्यादातर मामलों में डीएसटी 1 घंटे का है
आपको टाइमज़ोन ऑब्जेक्ट का उपयोग करना होगा और डेट के साथ जांच करनी होगी कि क्या यह डीएसटी के तहत गिर रहा है या नहीं और फिर आपको मैन्युअल रूप से डीएसटी ऑफसेट करना होगा। उदाहरण के लिए:

 TimeZone tz = TimeZone.getTimeZone("EST");
 boolean isDST = tz.inDaylightTime(yourDateObj);
 if(isDST){
 int sec= tz.getDSTSavings()/1000;// for no. of seconds
 Calendar cal= Calendar.getInstance();
 cal.setTime(yourDateObj);
 cal.add(Calendar.Seconds,sec);
 System.out.println(cal.getTime());// your Date with DST neglected
  }

टाइमज़ोन के लिए "ईएसटी" दर्ज करने के बजाय आप "EST5EDT" दर्ज कर सकते हैं। जैसा कि आपने नोट किया है, बस "ईडीटी" काम नहीं करता है। यह डेलाइट बचत समय के मुद्दे के लिए जिम्मेदार होगा। कोड लाइन इस तरह दिखती है:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("EST5EDT"));




timezone