Kann jemand mit folgendem Problem helfen?JDK-Zeitzonenproblem in der Türkei ("Asien/Istanbul" oder "Europa/Istanbul")
Mein Betriebssystem ist die neueste Windows 10 und seine Zeitzone ist
(UTC+0300) Istanbul
(Sommer wurde entfernt, und die Zeitzone wurde+0300
nach den letzten Vorschriften in der Türkei festgelegt - 7. September 2016)I verwende das neueste JDK, welches 1.8.0_131 ist. Tzdata-Version dieses JDK ist tzdata2017a, die Zeitzone Änderungen für die Türkei enthält.
Dies ist winziger Teil meiner Anwendung, die ich in main-Methode implementiert:
import java.util.Date;
import java.util.TimeZone;
public class TestMain {
public static void main(String[] args) {
String timeZoneStr = "Asia/Istanbul";
TimeZone timeZone = TimeZone.getTimeZone(timeZoneStr);
Date localDate = new Date();
System.out.println(localDate);
localDate.setTime(155631515L);
System.out.println(localDate);
System.out.println(getUTCFromLocal(localDate, timeZone));
}
public static Date getUTCFromLocal(Date localDate, TimeZone localTimeZone) {
return new Date(localDate.getTime()-localTimeZone.getOffset(localDate.getTime()));
}
}
Ergebnis des Codes ist:
Sun 21. Mai 15.19.48 EET 2017
Fr 2. Januar 21.13.51 EET 1970
Fr Jan 02 19.13.51 EET 1970
Nach neuester Update Zeitzone sollte letzte Zeile der Ausgabe sein "Fri 2. Januar 18.13.51 EET 1970", nicht „Fr 2. Januar 19.13 : 51 EET 1970 ".
In additon dazu, wenn ich neues Date-Objekt (new java.util.Date()
) erstellen, scheinen die Informationen in diesem Objekt korrekt und Zeitzone auf +0300
, aber wenn ich setTime
Methode der Date
Objekt Zeitzoneninformationen verwenden, um Änderungen zu +0200
. auch gleiche Problem auf andere JDK-Versionen reproduziert
I:
Wenn Datum Objekt mit new java.util.Date()
erstellt:
Wenn localDate.setTime(155631515L)
Methode ausgeführt.
Eigentlich haben sich die Regeln * viele * mal seit 1970 geändert. Sie können [den gesamten tzdb-Eintrag] (https://github.com/eggert/tz/blob/2017a/europe#L3505-L3652), oder überprüfen Sie können einfach [Zeit in Istanbul 1970] (https://www.timeanddate.com/time/zone/turkey/istanbul?year=1970) auschecken.Aber du hast Recht, es war in der Tat +200 im Januar 1970. :) –
@MattJohnson vielen dank für die Ergänzung und für den Link zum tzdb-Eintrag –