Wenn Sie formatierte Ergebnisse in UTC sehen möchten, dann benötigen Sie einen zweiten Formatierer mit möglichem anderem Muster und Gebietsschema und Zone auf UTC:
String input1 = "Sat Sep 10 07:30:20 IDT 2016";
String input2 = "Sat Dec 10 07:30:20 IST 2016";
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
Date d1 = sdf.parse(input1);
Date d2 = sdf.parse(input2);
SimpleDateFormat sdfOut =
new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
sdfOut.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println("IDT=>UTC: " + sdfOut.format(d1));
System.out.println("IST=>UTC: " + sdfOut.format(d2));
Ausgang:
IDT=>UTC: Sat Sep 10 04:30:20 UTC 2016
IST=>UTC: Sat Dec 10 05:30:20 UTC 2016
die Parsing-Formatierungs eingestellt werden keine spezielle Zone benötigen, weil Sie Ihre Eingabe der entsprechenden Zoneninformationen enthält.
Seitennotiz: Parsing Zeitzone Abkürzungen wie IST ist gefährlich, weil diese Abkürzung mehrere Bedeutungen hat. Sie wollen natürlich Israel Time, aber IST wird noch öfter als India Standard Time interpretiert. Nun, du hast Glück, dass SimpleDateFormat
-Zeichen "Z" es als Israel Standard Time interpretiert (funktioniert zumindest für mich in meiner Umgebung). Wenn Sie über die korrekte Interpretation von „IST“ sicher sein wollen, dann sollten Sie die Bibliothek Schalen betrachten und stellen Sie Ihre Präferenz für die Zeit Israel beim Parsen, zum Beispiel in Java-8:
DateTimeFormatterBuilder.setZoneText(TextStyle.SHORT, Collections.singleton(ZoneId.of("Asia/Jerusalem")))
Hallo. Danke für die Antwort. Was ist, wenn ich die Unixzeit des IDT \ IST Stringdatums bekommen möchte? Wenn ich das Datum analysiere, kehrt es zur lokalen Zeit zurück. irgendeine Lösung für dieses Problem? @Meno Hochschild – user3100708
@ user3100708 Der obige Code zeigt, wie die IDT/IST-Zeichenfolge zu einem Objekt vom Typ 'java.util.Date' analysiert wird. Dieses Objekt ist niemals lokale Zeit (obwohl seine Methode 'toString()' es unvollständig in Ihrer Systemzone mit lokaler Zeit beschreibt). Wirklich, es stellt einen Augenblick dar, und sein wahrer Zustand kann als verstrichene Zeit in Millisekunden seit der Unix-Epoche nach [getTime()] abgefragt werden (https://docs.oracle.com/javase/8/docs/api/java/util) /Date.html#getTime--) Wenn Sie diese Methode verwenden, müssen Sie nur das Ergebnis durch 1000 teilen, und Sie erhalten die Unix-Zeit. –