将 mysql 日期解析为 ZonedDateTime
Parsing mysql date to 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"))
);
Exception in thread "AWT-EventQueue-0" java.time.format.DateTimeParseException: Text '06-08-2017 04:15' could not be parsed: Unable to obtain ZonedDateTime from TemporalAccessor: {MinuteOfHour=15, DayOfMonth=8, WeekBasedYear[WeekFields[SUNDAY,1]]=2017, MonthOfYear=6, HourOfAmPm=4},ISO,Etc/GMT of type java.time.format.Parsed
是否有 better/shorter 方法来完成此操作?
您问题的本地修复是:
ZonedDateTime datetime = LocalDateTime.parse(row[1].toString(),
DateTimeFormatter.ofPattern("MM-dd-uuuu HH:mm"))
.atZone(ZoneOffset.UTC);
请注意,我已将您的格式模式中的 YYYY
更改为 uuuu
并将 hh
更改为大写 HH
。
编辑:我在这里吃得太饱了。您自己的 Java 代码只需对您的格式模式进行这两项更改即可很好地工作。我会保留我的代码版本,以防任何人都能从中获得灵感。
也就是说,最好的解决方案是从您的 JDBC 驱动程序获取例如 Instant
对象,而不是在数据库端格式化并在 [=24] 上解析的字符串=] 边。 JDBC 4.2 兼容的驱动程序应该能够为您提供。
我正在尝试按以下格式解析来自 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"))
);
Exception in thread "AWT-EventQueue-0" java.time.format.DateTimeParseException: Text '06-08-2017 04:15' could not be parsed: Unable to obtain ZonedDateTime from TemporalAccessor: {MinuteOfHour=15, DayOfMonth=8, WeekBasedYear[WeekFields[SUNDAY,1]]=2017, MonthOfYear=6, HourOfAmPm=4},ISO,Etc/GMT of type java.time.format.Parsed
是否有 better/shorter 方法来完成此操作?
您问题的本地修复是:
ZonedDateTime datetime = LocalDateTime.parse(row[1].toString(),
DateTimeFormatter.ofPattern("MM-dd-uuuu HH:mm"))
.atZone(ZoneOffset.UTC);
请注意,我已将您的格式模式中的 YYYY
更改为 uuuu
并将 hh
更改为大写 HH
。
编辑:我在这里吃得太饱了。您自己的 Java 代码只需对您的格式模式进行这两项更改即可很好地工作。我会保留我的代码版本,以防任何人都能从中获得灵感。
也就是说,最好的解决方案是从您的 JDBC 驱动程序获取例如 Instant
对象,而不是在数据库端格式化并在 [=24] 上解析的字符串=] 边。 JDBC 4.2 兼容的驱动程序应该能够为您提供。