Как я могу подвести итог двух ZoneOffset?

У меня есть два объекта ZoneOffset, разобранных из строк. Как я могу суммировать их и применить к ZonedDateTime?

Например:
оригинальный ZonedDateTime является 2017-12-27T18:30:00первое смещение +03второе смещение +05

Как я могу получить вывод 2017-12-28T18:30:00+08:00 или же 2017-12-28T10:30:00?

1 ответ

Решение

Я понимаю ваш вопрос таким образом (пожалуйста, проверьте, правильно ли): У вас есть один ZonedDateTime с обычным смещением от UTC. Я назову это dateTimeWithBaseOffset, И у вас есть еще один ZonedDateTime со смещением относительно смещения первого ZonedDateTime, Это действительно неверно; дизайнеры класса решили, что смещение от UTC, но кто-то использовал его не так, как предполагалось. Я позвоню последнему dateTimeWithOffsetFromBase,

Лучше всего, если вы можете исправить код, который произвел dateTimeWithOffsetFromBase с неортодоксальным смещением. Я предполагаю, что пока это не будет решением, которое вы можете использовать. Таким образом, вам нужно исправить неправильное смещение в смещение от UTC.

Это не плохо:

    ZoneOffset baseOffset = dateTimeWithBaseOffset.getOffset();
    ZoneOffset additionalOffset = dateTimeWithOffsetFromBase.getOffset();
    ZoneOffset correctedOffset = ZoneOffset.ofTotalSeconds(baseOffset.getTotalSeconds()
            + additionalOffset.getTotalSeconds());

    OffsetDateTime correctedDateTime = dateTimeWithOffsetFromBase.toOffsetDateTime()
            .withOffsetSameLocal(correctedOffset);
    System.out.println(correctedDateTime);

Используя ваши образцы даты и времени, это печатает

2017-12-28T18:30+08:00

Если вы хотите время в UTC:

    correctedDateTime = correctedDateTime.withOffsetSameInstant(ZoneOffset.UTC);
    System.out.println(correctedDateTime);

Это печатает дату и время, которое вы просили:

2017-12-28T10:30Z

Для даты-времени со смещением нам не нужно использовать ZonedDateTime, OffsetDateTime будет делать и может сообщить читателю, что мы собираемся сделать лучше (ZonedDateTime работает тоже, хотя).

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