Для преобразования LocalDateTime в Instant требуется ZoneOffset. Зачем?
Мне нужно конвертировать LocalDateTime
возражать против нового Instant
объект.
Я поняла LocalDateTime
имеет toInstant
метод, но он просит меня ZoneOffset
,
Я не совсем понимаю, как его использовать, или что делает ZoneOffset
предназначены для.
2 ответа
Вы не можете конвертировать LocalDateTime
прямо к Instant
потому что LocalDateTime
может представлять много моментов. Он не представляет один конкретный момент времени.
Вот LocalDateTime
:
23/10/2018 09:30:00
Можете ли вы выяснить, к какому моменту времени относится вышеуказанное, просто взглянув на него? Нет. Потому что это время в Великобритании отличается от того времени в Китае.
Чтобы выяснить, к какому моменту относится это время, вам также необходимо знать, на сколько часов оно смещено относительно UTC, и это то, что ZoneOffset
в основном представляет.
Например, для смещения 8 часов, вы должны написать это:
localDateTime.toInstant(ZoneOffset.ofHours(8))
Или, если вы знаете, что всегда хотите смещение зоны в текущем часовом поясе для этого местного времени, вы можете заменить ZoneOffset.ofHours(8)
с:
ZoneId.systemDefault().getRules().getOffset(localDateTime)
Вы должны подумать о том, какое смещение вы хотите использовать, прежде чем конвертировать его в мгновение ока.
Вы можете попробовать это:
LocalDateTime dateTime = LocalDateTime.of(2018, Month.OCTOBER, 10, 31, 56);
Instant instant = dateTime.atZone(ZoneId.of("Europe/Rome")).toInstant();
System.out.println(instant);