【问题标题】:DateTimeFormatter class exeception DateTimeParseExceptionDateTimeFormatter 类异常 DateTimeParseException
【发布时间】:2020-09-15 10:22:49
【问题描述】:

我想从 android 设备中的输入日期获取下一个 3 个月的日期。 对于大于 oreo 的版本,我尝试使用 DateTimeFormatter。 但我收到此错误“java.time.format.DateTimeParseException: Text '28/5/2020' could not be parsed at index 0”

这是我输入的日期字符串 = 28/5/2020

   String datestring = edittext_enterServiceDate.getText().toString();
                String dd = datestring.substring(0, 2);
                String mm = datestring.substring(3, 4);
                String yyyy = datestring.substring(5, 9);
                String dateString = dd + "/" + mm + "/" + yyyy;
                LocalDate date = LocalDate.parse(dd + "/" + mm + "/" + yyyy);

                DateTimeFormatter df = DateTimeFormatter.ofPattern("dd/MM/yyyy");
                LocalDate  d1 = LocalDate.parse(dateString, df);

                LocalDate returnvalue
                        = d1.plusMonths(Integer.parseInt(monthList.get(position).getStateId()));
                edittext_nextServiceDate.setText(String.valueOf(returnvalue.toString()));

【问题讨论】:

  • MM 考虑为月份值的00,因此月份值中有28/5/2020 错误5 它应该是05
  • 应该是 28/05/2020,因为您的格式是 dd/MM/yyyy

标签: android java-8 java-time android-date android-dateutils


【解决方案1】:

doc:

Number:如果字母数为 1,则使用输出值 最小位数且无填充。

使用dd/M/yyyy 格式作为您的日期字符串。它将解析日期字符串,如 28/5/202028/12/2020 两者。

DateTimeFormatter df = DateTimeFormatter.ofPattern("dd/M/yyyy");
LocalDate  d1 = LocalDate.parse("28/5/2020", df);
LocalDate  d2 = LocalDate.parse("28/07/2020", df);
LocalDate  d3 = LocalDate.parse("28/12/2020", df);

【讨论】:

  • 或者现在我们已经完成了,d/M/y 将在月份和年份的位数方面为我们提供相同的灵活性。无论如何都是好的答案。
猜你喜欢
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 2014-01-29
相关资源
最近更新 更多