Java8 DateTimeFormatter am/pm

2022-09-02 01:13:54

我试图解析一些日期,但DateTimeParser似乎不同意我关于什么是有效的

import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
import java.util.Locale

ZonedDateTime.parse("Wed Jul 16, 2016 4:38pm EDT", DateTimeFormatter.ofPattern("EEE MMM dd, yyyy hh:mma z", Locale.US))

当我尝试这个时,它说

java.time.format.DateTimeParseException: Text 'Wed Jul 16, 2016 4:38pm EDT' could not be parsed at index 17

所以时间有问题吗?当我放下其中一个“h”时,它会变得更远(虽然它应该只是0-pad我的小时),但后来它不喜欢pm的东西

ZonedDateTime.parse("Wed Jul 16, 2016 4:38pm EDT", DateTimeFormatter.ofPattern("EEE MMM dd, yyyy h:mma z", Locale.US))
java.time.format.DateTimeParseException: Text 'Wed Jul 16, 2016 4:38pm EDT' could not be parsed at index 21

我不知道他到底是什么问题。当我尝试“hh:mmaa”作为模式时,它说它不喜欢两个a,现在我被卡住了,因为错误消息没有帮助。


答案 1

a期望为大写或大写。要获得不区分大小写的格式化程序,您需要手动构建它:PMAM

DateTimeFormatter fmt = new DateTimeFormatterBuilder()
        .parseCaseInsensitive()
        .appendPattern("EEE MMM dd, yyyy h:mma z")
        .toFormatter(Locale.US);

请注意,您将收到一个新错误,因为 7 月 16 日不是星期三。


答案 2

请注意,和 的情况取决于您的区域设置!AMPM

因此,如果您的区域设置是美国,则预计为大写,但如果是英国,则预计为小写。

有关更多详细信息,请参阅:将时间戳中的时间段 (AM/PM) 本地化为另一种语言


推荐