【问题标题】:Spanish java.time.format.DateTimeParseException on time String西班牙语 java.time.format.DateTimeParseException on time String
【发布时间】:2018-08-08 19:57:22
【问题描述】:

我正在尝试使用 Java 8 DateTimeFormatter 类来解析西班牙语的时间字符串。经过几个小时的搜索,我找不到任何提示。返回的错误是:

java.time.format.DateTimeParseException:无法在索引 4 处解析文本“905 PM AST MARTES 7 AGOSTO 2018”

这似乎是“PM”元素的开始。

以下是相关代码:

DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
builder.parseCaseInsensitive();
builder.appendPattern("hmm a z EEE d MMM yyyy");
DateTimeFormatter formatter = builder.toFormatter(new Locale("es", "PR"));

String spanishDate = "905 PM AST MARTES 7 AGOSTO 2018"
Instant issuanceInstant = Instant.from(formatter.parse(spanishDate));

我尝试了不同的格式,但这是用于我需要解析的气象信息的标准格式。任何帮助将不胜感激。

【问题讨论】:

  • 仅供参考,构建器方法是可链接的。您不需要为每个单独声明。
  • 您检查过您的区域设置中的上午/下午符号吗?它们可能不是 AM 和 PM,在这种情况下,可能无法理解 PM。

标签: java locale


【解决方案1】:

EEEMMM 是缩写形式。完整格式需要使用 4 个字母:

hmm a z EEEE d MMMM yyyy

【讨论】:

  • 感谢您的建议。它仍然有同样的错误,但一旦解决了,这可能是下一个错误。
  • 我想知道所涉及的机器是否有特定的东西?我只是在使用标准的 Java 8 库。
  • @MattDavis 什么版本?
  • 有趣的是,如果我删除 PM,更改为 24 小时制,并从您建议的格式字符串中删除“a”,它就可以工作。 builder.appendPattern("HHmm z EEEE d MMMM yyyy"); String spanishDate = "2105 AST MARTES 7 AGOSTO 2018";
  • 看来我说错了。该机器已更新,并且正在使用 Java 10 库。 jre-10.0.2
【解决方案2】:

恢复到 Java 8 后,该错误已消失。感谢大家的帮助!我会针对它提交报告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多