2017-01-19 5 views
0

Ich versuche IDT zu analysieren und IST-Daten in UTC
Zum Beispiel auf Unix-Zeit:
Convert Zeit in IDT/IST in UTC zu Unix-Zeit

Thu Sep 10 07:30:20 IDT 2016 

Zu diesem Zeitpunkt sollte ich für die Unix-Zeit zu erhalten das Datum, aber in der Stunde 04.30.20
Und wenn es IST ist ich möchte Unix-Zeit von 5.30.20 in dem gleichen Datum erhalten

SimpleDateFormat formatter= new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); 
formatter.setTimeZone(TimeZone.getTimeZone("UTC"); 
System.out.println(formatter.parse(date).getTime()) 

ich immer noch Unix-Zeit von 07.30 Uhr : 20 inste Anzeige von 05:30:20 oder 04:30:20 (IST/IDT)

Antwort

3

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")))

+0

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

+0

@ 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. –