【问题标题】:DateTimeParseException - Text '8/19/2020' could not be parsed at index 0DateTimeParseException - 无法在索引 0 处解析文本“2020 年 8 月 19 日”
【发布时间】:2021-01-15 11:13:16
【问题描述】:

目前我有一种方法可以查看当前日期并与输入日期进行比较。我正在使用 java.time API。我得到一个 DateTimeParseException 我无法解析索引 0 处的文本值。下面是我的代码到目前为止:

public static boolean isWeekStartFormatValid(String value) { 
     value = Util.getTrimmedValue(value);
     //In constants public static final String DATE_FORMAT = "MM/dd/yyyy";
     DateTimeFormatter formatter = DateTimeFormatter.ofPattern(Constants.DATE_FORMAT);
     LocalDate currentDate = LocalDate.now();
     LocalDate inputDate = LocalDate.parse(value, formatter);        
     if(inputDate.isAfter(currentDate) && inputDate.getDayOfWeek() == DayOfWeek.SATURDAY) {
         return true;
     } 
     return false;       
 }

当我输入 2020 年 8 月 19 日的值时,我收到以下错误:

[err] 原因:java.time.format.DateTimeParseException:无法在索引 0 处解析文本“2020 年 8 月 19 日” [错误] 在 java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949) [错误] 在 java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851) [错误] 在 java.time.LocalDate.parse(LocalDate.java:400)

是不是我做的不对?应该有这样的尝试吗?不知道该怎么办。任何建议表示赞赏。

【问题讨论】:

  • 使用 java.time 是最好的方法(SO 标签 [java-time])。 Joda-Time 还不错,只是项目处于维护模式,不推荐用于新代码。

标签: java string localdate datetimeformatter


【解决方案1】:

使用 java.time 从字符串中获取日期:

LocalDate inputDate = LocalDate.parse(value,DateTimeFormatter.ofPattern("MM/dd/yyyy"));
LocalDate currentDate = LocalDate.now();

检查输入日期是否晚于当前日期:

inputDate.isAfter(currentDate)

检查输入日期是否为星期六:

inputDate.getDayOfWeek() == DayOfWeek.SATURDAY

【讨论】:

  • 谢谢!绝对有效。我猜 Joda 时间现在已经过时,而 java.time 是新标准。我当前的项目在不同的实现中使用 Joda 时间,但是将 java.time 添加到 maven POM 并在我的验证中使用它并没有什么坏处 :)
  • 是的,Joda 时间在添加 java.time 之前被广泛使用。现在java时间可以满足大部分常见需求。
猜你喜欢
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
相关资源
最近更新 更多