Мне нужно преобразовать объект LocalDateTime в новый объект Instant.

Я понял, что у LocalDateTime есть метод toInstant, но он запрашивает у меня ZoneOffset.

Я не совсем понимаю, как его использовать и для чего предназначен ZoneOffset.

6
Jordi 23 Окт 2018 в 11:25

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)

Вы должны подумать о том, какое смещение вы хотите использовать, прежде чем преобразовывать его в мгновенное значение.

14
Sweeper 23 Окт 2018 в 08:43

Вы можете попробовать это:

LocalDateTime dateTime = LocalDateTime.of(2018, Month.OCTOBER, 10, 31, 56);
Instant instant = dateTime.atZone(ZoneId.of("Europe/Rome")).toInstant();
System.out.println(instant);
0
Prima Alessandro 23 Окт 2018 в 08:31
52944410