Diese Antwort könnte irgendwie strukturierter sein als die richtige Antwort von Jon Skeet. In meinem obigen Kommentar habe ich auch darauf hingewiesen, die unveränderliche Natur von nicht zu übersehen, also weisen Sie immer das Ergebnis einer beliebigen Methode mit dem Präfix "with ...()" einer Variablen desselben Typs zu.
// 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
Dann weisen Sie der EST-Zone Ihre lokale Datums-/Uhrzeit zu. Es ist sicherer, die IANA-Notation "America/New_York" zu verwenden, als die veraltete Form "EST5EDT" zu verwenden (die nur feste dst-Regeln unterstützt, ohne historische Historie von Offsets).
ZonedDateTime zdt = ldt.atZone(ZoneId.of("America/New_York"));
Schließlich verwandeln Sie die Zwischen globalen Zeitstempel zurück zu einem lokalen Datum-Zeit im Offset UTC + 00 die gleiche physikalische Zeit zu bewahren:
LocalDateTime utc = zdt.withZoneSameInstant(ZoneOffset.UTC).toLocalDateTime();
System.out.println(utc); // 2015-06-16T19:35:56
Der Ausdruck 'formatter.withZone (ZoneId.of ("EST5EDT")); 'ist nutzlos, da Sie es keiner Instanz von' DateTimeFormatter' zuweisen. Denken Sie daran, dass diese Klasse unveränderlich ist, so dass alle Änderungen nur durch Kopieren, nicht durch Manipulieren derselben Instanz erreicht werden können. Und das Einstellen der Zeitzone auf diese Weise hat keinen Einfluss auf das Parsing auf 'LocalDateTime' (Zone wird ignoriert). –