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));