Parse String timestamp to Instant throws Неподдерживаемое поле: InstantSeconds

Я пытаюсь преобразовать String в Instant. Можете ли вы мне помочь?

Я получаю следующее исключение:

Вызвано: java.time.temporal.UnsupportedTemporalTypeException: Неподдерживаемое поле: InstantSeconds     в java.time.format.Parsed.getLong(Parsed.java:203)     в java.time.Instant.from(Instant.java:373)

Мой код выглядит в основном таким образом

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String timestamp = "2016-02-16 11:00:02";
TemporalAccessor temporalAccessor = formatter.parse(timestamp);
Instant result = Instant.from(temporalAccessor);

Я использую Java 8 Update 72.

Ответ 1

Вот как можно получить мгновенный часовой пояс по умолчанию. Ваш String не может быть проанализирован прямо в Instant, потому что отсутствует часовой пояс. Таким образом, вы всегда можете получить по умолчанию

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    String timestamp = "2016-02-16 11:00:02";
    TemporalAccessor temporalAccessor = formatter.parse(timestamp);
    LocalDateTime localDateTime = LocalDateTime.from(temporalAccessor);
    ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.systemDefault());
    Instant result = Instant.from(zonedDateTime);

Ответ 2

Более простой способ - добавить часовой пояс по умолчанию к объекту форматирования при его объявлении.

final DateTimeFormatter formatter = DateTimeFormatter
                                    .ofPattern("yyyy-MM-dd HH:mm:ss")
                                    .withZone(ZoneId.systemDefault());
Instant result = Instant.from(formatter.parse(timestamp));

Ответ 3

Сначала преобразуйте дату в используемую дату, используя формат даты, поскольку у вас нет часового пояса. Затем вы можете конвертировать эту дату в Мгновенную дату. Это даст вам дату с точным временем.

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String timestamp = "2016-02-16 11:00:02";
Date xmlDate = dateFormat.parse(timestamp);
dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
Instant instantXmlDate = Instant.parse(dateFormat.format(xmlDate));