Я использую библиотеки Joda time (1.6), и он продолжает возвращать объекты DateTime с неправильный часовой пояс, британское летнее время вместо GMT.
Моя рабочая станция Windows (под управлением JDK 1.6.0_16) думает, что находится в GMT, и если я получаю часовой пояс по умолчанию из классов даты / времени JDK, он правильный (GMT). Такое же поведение наблюдается и на наших серверах Linux. Я подумал, что это может быть ошибка в файлах базы данных часовых поясов в Joda, поэтому я перестроил банку с последней базой данных, но без изменений.
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"
}
}
Выполняя отладку с помощью статического инициализатора в org.joda.time.DateTimeZone
, я вижу, что вызов System.getProperty("user.timezone")
дает "Europe/London"
, как и ожидалось.