Korzystam z bibliotek Joda time (1.6) i zachowuje on powracające obiekty DateTime ze złej strefy czasowej, brytyjski czas letni zamiast GMT.Czas Jody podaje niewłaściwą strefę czasową
Moja stacja robocza Windows (z JDK 1.6.0_16) myśli, że jest w GMT i jeśli otrzymam domyślną strefę czasową z klas daty/czasu JDK, jest ona poprawna (GMT). Podobne zachowanie występuje również na naszych serwerach Linux. Pomyślałem, że może to być błąd w plikach bazy danych strefy czasowej w Jodzie, więc przebudowałem słoik z najnowszą bazą danych, ale bez żadnych zmian.
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"
}
}
debugowanie poprzez statyczną initialiser w org.joda.time.DateTimeZone
widzę, że rozmowa System.getProperty("user.timezone")
daje "Europe/London"
jak oczekiwano.
rozszerzona odpowiedź na wyjaśnienie prawdziwego problemu – jitter