Правильный способ использования периодов для перехода на летнее время с помощью Joda Time
Я получаю неправильные результаты из-за летнего времени в тот день.
Я использовал,
Calendar todays = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles"));
todays.set(Calendar.HOUR_OF_DAY, 24);
todays.set(Calendar.MINUTE, 0);
todays.set(Calendar.SECOND, 0);
todays.set(Calendar.MILLISECOND, 0);
Как упомянуто в документе Joda-Time,
Попробуйте добавить 1 день на границе летнего времени. Если для сложения вы используете период, то будет добавлено 23 или 25 часов. Если бы вы создали продолжительность, равную 24 часам, то вы бы в итоге получили неправильный результат.
Я не нашел ни одного примера того, как реализовать такой период с использованием Joda-Time.
Итак, я хочу получить количество часов, содержащихся в каждом дне, динамически довольно жестко, кодируя его с 24 часами, как уже упоминалось.
1 ответ
Самый простой подход - это использовать что-то вроде:
public int getHoursInDay(LocalDate date, DateTimeZone zone) {
DateTime start = date.toDateTimeAtStartOfDay(zone);
DateTime end = date.plusDays(1).toDateTimeAtStartOfDay(zone);
return new Duration(start, end).getStandardHours();
}
РЕДАКТИРОВАТЬ: Если вы используете версию Joda Time, которая не поддерживает Duration.getStandardHours()
Вы могли бы использовать:
public int getHoursInDay(LocalDate date, DateTimeZone zone) {
DateTime start = date.toDateTimeAtStartOfDay(zone);
DateTime end = date.plusDays(1).toDateTimeAtStartOfDay(zone);
long millis = new Duration(start, end).getMillis();
return (int) (millis / DateTimeConstants.MILLIS_PER_HOUR);
}