Разбор даты 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, должен дать вам такую ​​возможность.

Другие вопросы по тегам