我正在尝试以下列格式解析来自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
有没有更好/更短的方法来完成这项工作?
答案 0 :(得分:1)
您问题的本地修复是:
ZonedDateTime datetime = LocalDateTime.parse(row[1].toString(),
DateTimeFormatter.ofPattern("MM-dd-uuuu HH:mm"))
.atZone(ZoneOffset.UTC);
请注意,我已在您的格式模式中将YYYY
更改为uuuu
并将hh
更改为大写HH
。
也就是说,最好的解决方案是从JDBC驱动程序中获取一个Instant
对象,而不是在数据库端格式化并在Java端解析回来的字符串。符合JDBC 4.2的驱动程序应该能够为您提供。