Мне трудно понять java.time между ZoneDateTime - Instant - LocalDateTime, пока единственное, о чем я знаю:
- Мгновенно работает между двумя
- Мгновенный (в моем понимании) - это штамп времени с момента времени (UTC), штамп времени, который имеет отношение к потоку человеческого времени, но без часового пояса.
- Зона Дата время имеет часовой пояс
- Instant не имеет часового пояса, но может работать с ним, учитывая, что предоставляется информация о зоне.
- Время LocalDate не имеет часового пояса и не может иметь дело с зонами, это дата и время, не имеющее никакого отношения к продолжению всего потока времени (глобальное).
Итак, у меня есть это преобразование ниже
val seoul = "Asia/Seoul"
val zoneId = ZoneId.of(seoul)
val now = ZonedDateTime.now()
val convertedZoneDateTIme = ZonedDateTime.of(now.toLocalDateTime(), zoneId).withZoneSameInstant(ZoneOffset.UTC)
val convertedInstant = now.toInstant().atZone(zoneId)
// expected output
println(convertedInstant.format(DateTimeFormatter.ofPattern(format)))
// not expected output
println(converted.format(DateTimeFormatter.ofPattern(format)))
Вывод
2021-05-02 03:15:13
2021-05-02 09:15:13
Я пытаюсь преобразовать заданное время в другой часовой пояс, вариант использования, когда пользователь перешел в другой часовой пояс, и мне нужно обновить любую информацию о сохраненной дате.
Почему я получаю неверное значение на втором ..? Почему мне нужно сначала преобразовать его в Instant, а затем продолжить преобразование?
заранее спасибо
ZonedDateTime
. Моя рекомендация: используйте явные типы вместоval
. И выберите формат, показывающий часовой пояс. Тогда вы увидите, что первый результат находится в UTC, а второй результат - в южнокорейской зоне. - person Meno Hochschild   schedule 05.05.2021