我正在使用用 Java 编写的应用程序,该应用程序使用 LocalDate.parse 和 DateTimeFormatter。我只能给它提供一个格式字符串(我无法修改源代码)。我需要它成功解析一个有点疯狂的日期格式,如下所示:
Wed Jun 03 12:00:00 PM GMT 2020
我最接近的格式是:
EEE MMM dd hh:mm:ss a zzz yyyy
但这会爆炸
Exception java.time.format.DateTimeParseException: Text 'Wed Jun 03 12:00:00 PM GMT 2020' could not be parsed at index 20
如果我删除日期和格式中的上午/下午,一切正常。有什么调整可以使解析成功吗?
ZonedDateTime
,不是LocalDate
LocalDate
是您输入的错误类别。 LocalDate
只有日期,没有时间,也没有时区。
ZonedDateTime
课程。
使用
DateTimeFormatter
类定义与您的输出匹配的自定义格式。
指定
Locale
。您的输入以多种方式本地化:星期几的名称、月份的名称和上午/下午。选择代表您输入中看到的本地化选项的 Locale
。我相信 Locale.US
可能会起作用。
String input = "Wed Jun 03 12:00:00 PM GMT 2020" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss a z uuuu" ).withLocale( Locale.US ) ;
ZonedDateTime zdt = ZonedDateTime.parse( input , f ) ;
zdt.toString() = 2020-06-03T12:00Z[GMT]
理想的解决方案是让数据发布者了解 ISO 8601 标准,以文本形式明确传达日期时间值。