Наше приложение использует jodatime для обработки времени, и (по причинам форматирования API) мы храним время в классе модели, который выглядит примерно так:
class Event {
private LocalDateTime localTime;
private DateTimeZone timeZone;
public DateTime getTime() {
return localStopTime.toDateTime(timeZone);
}
public void setTime(DateTime value) {
this.localTime = value.toLocalDateTime();
this.timeZone = value.getZone();
}
// ...more boilerplate
}
Дальше вниз по течению я заметил, что у нас было другое время, чем мы устанавливали. Я подумал, что мы преобразовали поля обратно в DateTime неправильно, так как локальные поля, кажется, имеют правильные значения.
По какой-то причине я попытался изменить геттер, и теперь он работает, но я понятия не имею, почему:
public DateTime getTime() {
return localStopTime.toDateTime().withZone(timeZone);
}
Документация joda немного недоверчива о том, как она выполняет вызов toDateTime()
; он говорит, что как-то «использует» определенный часовой пояс, но это все.
Может кто-нибудь объяснить мне, в чем разница между
return localStopTime.toDateTime(timeZone);
и
return localStopTime.toDateTime().withZone(timeZone);
Заранее спасибо!
Редактировать: Я понял это - я использовал «Etc / GMT» в качестве часового пояса, и это не учитывало переход на летнее время. Пометили ответ Марко как правильный