इस उत्तर हो सकता है जॉन स्कीट के सही जवाब से किसी भी तरह से अधिक संरचित हो। ऊपर मेरी टिप्पणी में मैंने यह भी बताया है कि DateTimeFormatter
की अपरिवर्तनीय प्रकृति को नजरअंदाज न करें, इसलिए कृपया हमेशा उसी प्रकार के चर के साथ "...()" द्वारा उपसर्ग किए गए किसी भी विधि का परिणाम असाइन करें।
// parsing your string input
// NO!!! timezone is needed in this step because LocalDateTime is just without timezone
String str = "16Jun2015_153556";
DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("ddMMMuuuu_HHmmss", Locale.ENGLISH);
LocalDateTime ldt = LocalDateTime.parse(str, formatter);
System.out.println(ldt); // your input as java.time-object: 2015-06-16T15:35:56
फिर आप अपने स्थानीय दिनांक-समय को ईएसटी-जोन में असाइन करते हैं। पुरानी रूप "ईएसटी 5ईडीटी" (जो केवल ऐतिहासिक कच्चे ऑफसेट के इतिहास के बिना निश्चित डीएस नियमों का समर्थन कर रहा है) का उपयोग करने के बजाय आईएएनए-नोटेशन "अमेरिका/न्यू_यॉर्क" का उपयोग करना सुरक्षित है।
ZonedDateTime zdt = ldt.atZone(ZoneId.of("America/New_York"));
अंत में आप मध्यवर्ती वैश्विक टाइमस्टैम्प वापस एक स्थानीय तारीख-समय पर ऑफसेट UTC + 00 पर बदलना ही शारीरिक समय संरक्षण:
LocalDateTime utc = zdt.withZoneSameInstant(ZoneOffset.UTC).toLocalDateTime();
System.out.println(utc); // 2015-06-16T19:35:56
स्रोत
2015-06-16 16:39:39
अभिव्यक्ति 'formatter.withZone (ZoneId.of ("ईएसटी 5ईडीटी")); 'बेकार है क्योंकि आप इसे' डेटटाइमफॉर्मेटर 'के किसी भी उदाहरण में असाइन नहीं करते हैं। याद रखें कि यह वर्ग अपरिवर्तनीय है इसलिए सभी परिवर्तनों को प्रतिलिपि करके ही प्राप्त किया जा सकता है, एक ही उदाहरण में हेरफेर नहीं किया जा सकता है। और टाइमज़ोन को इस तरह से सेट करना 'लोकलडेट टाइम' पर पार्सिंग को प्रभावित नहीं करता है (ज़ोन को अनदेखा कर दिया जाएगा)। –