Ich benutze die Joda time (1.6) Bibliotheken und es gibt immer wieder DateTime Objekte mit der falschen Zeitzone, British Summer Time statt GMT.Joda Zeit gibt falsche Zeitzone
Meine Windows-Workstation (mit JDK 1.6.0_16) denkt, es ist in GMT und wenn ich die Standardzeitzone von den JDK-Datum/Uhrzeit-Klassen bekomme, ist es korrekt (GMT). Ich bekomme das gleiche Verhalten auf unseren Linux-Servern. Ich dachte, es könnte ein Fehler in den Zeitzonen-Datenbankdateien in Joda sein, also habe ich das Jar mit der neuesten Datenbank neu erstellt, aber ohne Änderung.
import java.util.TimeZone;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalTime;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
public class TimeZoneTest {
public static void main(String[] args) {
DateTimeFormatter timeParser = ISODateTimeFormat.timeParser();
TimeZone timeZone = TimeZone.getDefault();
System.out.println(timeZone.getID()); // "Europe/London"
System.out.println(timeZone.getDisplayName()); // "Greenwich Mean Time"
DateTimeZone defaultTimeZone = DateTimeZone.getDefault();
System.out.println(defaultTimeZone.getID()); //"Europe/London"
System.out.println(defaultTimeZone.getName(0L)); //"British Summer Time"
DateTime currentTime = new DateTime();
DateTimeZone currentZone = currentTime.getZone();
System.out.println(currentZone.getID()); //"Europe/London"
System.out.println(currentZone.getName(0L)); //"British Summer Time"
}
}
Debugging durch den statischen initialiser in org.joda.time.DateTimeZone
ich sehe, dass die System.getProperty("user.timezone")
Anruf "Europe/London"
gibt wie erwartet.
erweiterte Antwort zur Erklärung des realen Problems – jitter