【问题标题】:java.time.format.DateTimeParseExceptionjava.time.format.DateTimeParseException
【发布时间】:2017-05-31 07:46:21
【问题描述】:

我正在将正常日期解析为 LocalDate 格式。转换时我收到一个异常调用。

原因:java.time.format.DateTimeParseException: Text '2017-01-12 00:00:00.0' 无法在索引 2 处解析 java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949) [rt.jar:1.8.0_111] 在 java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851) [rt.jar:1.8.0_111] 在 java.time.LocalDate.parse(LocalDate.java:400) [rt.jar:1.8.0_111]

据我所知,我得到了相同的甲酸盐。所以在转换时我得到了这个异常。我正确吗?如果我是正确的如何检查输入的格式是否相同。

这是我的代码:-

        DateTimeFormatter DATE_FORMAT =  new DateTimeFormatterBuilder().appendPattern("dd/MM/yyyy").toFormatter();
        LocalDate localDate = LocalDate.parse(myClass.getDate, DATE_FORMAT);
        System.out.println(localDate.format(DATE_FORMAT));

【问题讨论】:

    标签: java date


    【解决方案1】:

    模式“dd/MM/yyyy”与您的输入不匹配。使用模式

    "uuuu-MM-dd HH:mm:ss.S" 代替。同样重要的是:您不应将此类输入解析为LocalDate,因为您的输入也包含时间信息。更成熟的类型是LocalDateTime。完整示例在给定输入(如您的异常所示)和希望输出之间产生差异:

    DateTimeFormatter DATE_FORMAT =
        new DateTimeFormatterBuilder().appendPattern("uuuu-MM-dd HH:mm:ss.S").toFormatter();
    LocalDateTime ldt = LocalDateTime.parse("2017-01-12 00:00:00.0", DATE_FORMAT);
    System.out.println(ldt); // 2017-01-12T00:00
    
    System.out.println(ldt.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"))); // 12/01/2017
    

    【讨论】:

    • 其实第一次保存更新的时候没有问题就是抛出这种异常
    • 我得到的确切输入是 07/01/2017
    • @ravi 不,如果我们按照上面提到的堆栈跟踪,“07/01/2017”不能成为您的解析例程的输入。
    • 抱歉给我带来的不便,我得到的输入与我提到的完全一样
    • 我可以知道如何使用已经存在的日期检查日期格式
    【解决方案2】:

    这个模式appendPattern("dd/MM/yyyy")不能格式化这个字符串 2017-01-12 00:00:00.0

    改用 appendPattern("yyyy-MM-dd HH:mm.ss.S")

    【讨论】:

      猜你喜欢
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多