Почему withWeekOfWeekyear дает мне другое смещение?

Я пытаюсь конвертировать с WeekOfWeekyear в java.time. Я не могу понять, почему я получаю другое смещение с withWeekOfWeekyear по сравнению с weekOfWeekBasedYear.

    DateTime dateTimeWeek = new DateTime().withWeekOfWeekyear(1);
    OffsetDateTime offsetDateTimeWeek = OffsetDateTime.now().with(WeekFields.ISO.weekOfWeekBasedYear(), 1);

    DateTime dateTime = new DateTime();
    OffsetDateTime offsetDateTime = OffsetDateTime.now();

    System.out.println(dateTimeWeek); // 2016-01-04T12:20:50.981-05:00
    System.out.println(offsetDateTimeWeek); // 2016-01-04T12:20:51.034-04:00

    System.out.println(dateTime); // 2016-07-18T12:20:51.101-04:00
    System.out.println(offsetDateTime); // 2016-07-18T12:20:51.101-04:00

1 ответ

Решение

org.joda.time.DateTime осведомлен о часовом поясе.

DateTime рассчитывает свои поля относительно time zone,

java.time.OffsetDateTime не осведомлен о часовом поясе, т.е. не настраивается на летнее время.

OffsetDateTime добавляет к моменту смещение от UTC/ Гринвич, что позволяет получить местную дату и время. ZonedDateTime добавляет полные правила часовых поясов.

java.time.ZonedDateTime осведомлен о часовом поясе, поэтому, если вы используете это, вы должны получить тот же результат.

ZonedDateTime является неизменным представлением даты и времени с часовым поясом.

Другие вопросы по тегам