有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Java8 DateTimeFormatter am/pm

我正试图解析一些日期,但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”时,它会变得更远(虽然它应该只会让我的时间变短),但它不喜欢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,现在我被卡住了,因为错误消息没有帮助


共 (3) 个答案

  1. # 2 楼答案

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

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

    请注意,由于7月16日不是星期三,因此将出现新的错误

  2. # 3 楼答案

    事实证明,该解决方案还解决了使用“MMM”解析混合案例月份(例如“Jul”)的问题