【问题标题】:Text '28Feb2020' could not be parsed, unparsed text found at index 7无法解析文本“28Feb2020”,在索引 7 处找到未解析的文本
【发布时间】:2021-11-02 09:25:12
【问题描述】:

输入文本是 20FEB2020

以下代码块抛出 DateTimeParseException 并显示消息无法解析文本“28Feb2020”,在索引 7 处找到未解析的文本

String issueDate = abcIssueDate.substring(0, 3)
                  + abcIssueDate.substring(3).toLowerCase();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ddMMMyy", Locale.US);
LocalDate localDate = LocalDate.parse(issueDate, formatter);

【问题讨论】:

  • yy 应该是yyyy
  • 不回答您的问题,而不是手动修复Feb 的大小写,使用DateTImeFormatterBuilder 指定不区分大小写的解析。
  • 我不确定你被困在哪里了。模式显然与输入不匹配,乍一看很容易发现。
  • 这能回答你的问题吗? Java 8 DateTimeFormatter two digit year 18 parsed to 0018 instead of 2018? 不是完全相同的问题,但答案也可能对您有所帮助。
  • 欢迎来到 Stack Overflow。我投了赞成票,因为我发现这个问题很清楚,而且很容易回答。我的猜测是,反对票来自那些发现问题搜索和研究不佳的用户。 Guideline #1 on Stack Overflow 表示在发布您的问题之前进行搜索和研究。

标签: java date java-time date-parsing datetimeparseexception


【解决方案1】:

您的代码块抛出的异常很可能是由您的DateTimeFormatter 的模式引起的。正如您的问题下方已评论的那样,您使用两个 y 表示一年有 4 位数字。
因此,您可以将模式更改为 "ddMMMyyyy",这可能会起作用。

另外,我强烈建议您构建和使用 DateTimeFormatterDateTimeFormatterBuilder#parseCaseInsensitive,它可以不区分大小写地解析输入字符串:

public static void main(String[] args) throws IOException {
    String time = "20FEB2020";
    // build a DateTimeFormatter that parses case-insensitively
    DateTimeFormatter dtf = new DateTimeFormatterBuilder()
                                    .parseCaseInsensitive()
                                    .appendPattern("ddMMMuuuu")
                                    .toFormatter(Locale.ENGLISH);
    LocalDate localDate = LocalDate.parse(time, dtf);
    System.out.println(localDate);
}

结果是(隐式使用LocalDatetoString()方法):

2020-02-20

【讨论】:

  • 特别赞成 .parseCaseInsensitive() 的演示。它提供了更好的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 2021-06-01
  • 2020-08-10
  • 2016-10-02
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多