0

我正在尝试以以下格式解析来自 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 of type java.time.format.Parsed

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

4

1 回答 1

1

您的问题的本地修复是:

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

请注意,我已在您的格式模式中更改YYYY为大写。uuuuhhHH

编辑:我在这里吃得太饱了。只需对格式模式进行这两项更改,您自己的 Java 代码就可以很好地工作。我将保留我的代码版本,以防任何人从中获得灵感。

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

于 2017-06-08T15:48:25.373 回答