Разбор даты mysql в ZonedDateTime
Я пытаюсь проанализировать данные, поступающие от MySql в следующем формате:
DATE_FORMAT(datetime,'%m-%d-%Y %H:%i')
Код парсера Java выглядит следующим образом:
ZonedDateTime datetime = ZonedDateTime
.parse(
row[1].toString(),
DateTimeFormatter
.ofPattern("MM-dd-YYYY hh:mm")
.withZone(ZoneId.of("Etc/GMT"))
);
Исключение в потоке "AWT-EventQueue-0" java.time.format.DateTimeParseException: Text '06-08-2017 04:15'не удалось проанализировать: невозможно получить ZonedDateTime из TemporalAccessor: {MinuteOfHour=15, DayOfMonth=8, WeekBasedYear[WeekFields[SUNDAY,1]]=2017, MonthOfYear=6, HourOfAmPm=4},ISO,Etc/GMT типа java.time.format.Parsed
Есть ли лучший / короткий способ сделать это?
1 ответ
Локальный ремонт вашей проблемы:
ZonedDateTime datetime = LocalDateTime.parse(row[1].toString(),
DateTimeFormatter.ofPattern("MM-dd-uuuu HH:mm"))
.atZone(ZoneOffset.UTC);
Обратите внимание, что я изменился YYYY
в uuuu
а также hh
в верхний регистр HH
в вашем формате шаблона.
Редактировать: я принимал мой рот слишком полный здесь. Ваш собственный код Java прекрасно работает только с этими двумя изменениями в шаблоне формата. Я оставлю свою версию кода на тот случай, если кто-то сможет извлечь из него вдохновение.
Тем не менее, лучшее решение состоит в том, чтобы получить, например, Instant
объект из вашего драйвера JDBC, а не строка, отформатированная на стороне базы данных и проанализированная на стороне Java. Драйвер, совместимый с JDBC 4.2, должен дать вам такую возможность.