0

Java 8 – Создание Instant из LocalDateTime с учетом часового пояса

14

Описание проблемы:

У меня есть дата, хранящаяся в базе данных в формате строки ddMMyyyy и hh:mm вместе с информацией о временной зоне. Я хочу создать объект типа Instant на основе этой информации, но не знаю, как это сделать.

Нужно реализовать что-то похожее на следующий код:

LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39);
Instant instant = dateTime.toInstant(TimeZone.getTimeZone("ECT"));

Кто-нибудь может подсказать, как правильно преобразовать строку с датой и временем в объект Instant, принимая во внимание временную зону? Заранее спасибо!

2 ответ(ов)

1

Вы можете сначала создать объект ZonedDateTime с нужной временной зоной, а затем вызвать метод toInstant:

LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 15, 13, 39);
Instant instant = dateTime.atZone(ZoneId.of("Europe/Paris")).toInstant();
System.out.println(instant); // 2017-06-15T11:39:00Z

Я также перешел на использование полного названия временной зоны (согласно совету Basil), так как это менее двусмысленно.

0

Забудьте про старый класс TimeZone. Используйте ZoneId, так как он правильно безопасен для потоков, и вы можете просто использовать final static поле для хранения временной зоны.

Вот пример:

LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39);
ZonedDateTime zonedDateTime = ZonedDateTime.of(dateTime, ZoneId.of("ECT"));
Instant instant = zonedDateTime.toInstant();

Таким образом, вы получите корректное представление временной метки, безопасное для многопоточности.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь