【问题标题】:Error: Text '1/31/2020' could not be parsed at index 0 while trying to parse string date错误:尝试解析字符串日期时,无法在索引 0 处解析文本“1/31/2020”
【发布时间】:2020-10-21 02:25:05
【问题描述】:

我有一个日期字符串如下

String test Date = "1/31/2020";

我正在使用下面的代码

public static String getPeriodMonth(String periodEndDate) {
        LocalDate localDate;
        YearMonth yearMonth = null;
        try {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
            localDate = LocalDate.parse(periodEndDate, formatter);
            yearMonth = YearMonth.from(localDate);
        }catch (Exception e) {
             LOGGER.error("Error: "+ e.getMessage() + ">>" +   e.getCause());
        }
        return yearMonth.toString();

    }

执行此代码时出现以下异常:

Error: Text '1/31/2020' could not be parsed at index 0>>null

有人可以帮助我在这里做错了什么吗?

【问题讨论】:

标签: java date java-time date-parsing


【解决方案1】:

您应该传递01/31/2020或将格式更新为M/dd/yyyy

DateTimeFormatter documentation

月份被视为一个数字并在文档中:

数字:如果字母数为 1,则使用最小位数输出值且不进行填充。否则,将使用位数作为输出字段的宽度,并根据需要将值补零。

【讨论】:

  • 但这是在一个循环中,因此我还有其他类似的日期 2020 年 11 月 31 日
  • M/dd/yyyy 也与“11/31/2020”兼容
  • 谢谢@艾里。这解决了我的问题。
【解决方案2】:

错误是由于使用了格式字符串。 “MM”要求输入字符串的月份部分正好是两位数,但“1”只有一位数。换句话说,"MM/dd/yyyy" 适用于“01/31/2020”,但不适用于“1/31/2020”。

这里需要的是“M”而不是“MM”,它不需要值以“0”开头:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("M/dd/yyyy");

如果还应允许日期部分为单个数字且在第 0-9 天不使用 0 填充,则应使用 "M/d/yyyy" 模式。

这是描述DateTimeFormatterJavadocs:

所有字母“A”到“Z”和“a”到“z”都保留为模式字母。定义了以下模式字母:

Symbol  Meaning                     Presentation      Examples
------  -------                     ------------      -------
[...]
 M/L     month-of-year               number/text       7; 07; Jul; July; J
[...]

文字: [...]

数字:如果字母数为 1,则使用最小位数输出该值且不进行填充。否则,位数将用作输出字段的宽度,必要时将值补零。 [...]

数字/文本:如果模式字母的数量为 3 或更多,请使用上面的文本规则。否则使用上面的数字规则。

由于“M”使用“数字/文本”表示,并且其在"MM/dd/yyyy" 格式中的字母数为 2 ("MM"),因此月份恰好需要两位数字。将格式切换为单个“M”会导致它使用最少位数(1-9 个月一个数字,10-12 个月两个数字)。

【讨论】:

    猜你喜欢
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 2020-06-25
    相关资源
    最近更新 更多