将mysql日期解析为ZonedDateTime

时间:2017-06-08 15:13:48

标签: java mysql datetime-parsing 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:无法解析文本'06 -08-2017 04:15':无法从TemporalAccessor获取ZonedDateTime:{MinuteOfHour = 15,DayOfMonth = 8,WeekBasedYear [WeekFields [SUNDAY,1]] = 2017,MonthOfYear = 6,HourOfAmPm = 4},ISO,Etc / GMT,类型为java.time.format.Parsed

有没有更好/更短的方法来完成这项工作?

1 个答案:

答案 0 :(得分:1)

您问题的本地修复是:

    ZonedDateTime datetime = LocalDateTime.parse(row[1].toString(), 
                    DateTimeFormatter.ofPattern("MM-dd-uuuu HH:mm"))
            .atZone(ZoneOffset.UTC);

请注意,我已在您的格式模式中将YYYY更改为uuuu并将hh更改为大写HH

编辑:我的嘴巴太满了。您自己的Java代码可以很好地处理格式模式的这两个更改。我会让我的代码版本保留,以防任何人从中获取灵感。

也就是说,最好的解决方案是从JDBC驱动程序中获取一个Instant对象,而不是在数据库端格式化并在Java端解析回来的字符串。符合JDBC 4.2的驱动程序应该能够为您提供。