用于解析“Wed Jun 03 12:00:00 PM GMT 2020”的 Java DateTimeFormatter 表达式

问题描述 投票:0回答:1

我正在使用用 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

如果我删除日期和格式中的上午/下午,一切正常。有什么调整可以使解析成功吗?

java date-formatting datetimeformatter
1个回答
0
投票

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

理想的解决方案是让数据发布者了解 ISO 8601 标准,以文本形式明确传达日期时间值。

© www.soinside.com 2019 - 2024. All rights reserved.