无法在索引16处分析DateTimeParseException Java很少触发

gijlo24d  于 2022-12-17  发布在  Java
关注(0)|答案(3)|浏览(119)

最近我遇到了这个问题。2但是这种情况很少发生,有时我的程序运行得很顺利。3是什么触发了这个异常?4如何彻底解决这个问题:
代码:

63: DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss", Locale.US);
64: String strLocalDate = loginRecords.getLoginDate().toLocalDateTime().toString();
65: LocalDateTime lastLogin = LocalDateTime.parse(strLocalDate, formatter);

例外文本:

Exception in thread "Thread-5" java.time.format.DateTimeParseException: Text '2015-11-21T14:15' could not be parsed at index 16
    at java.time.format.DateTimeFormatter.parseResolved0(Unknown Source)
    at java.time.format.DateTimeFormatter.parse(Unknown Source)
    at java.time.LocalDateTime.parse(Unknown Source)
    at com.fesca.view.MainMenuFrame.<init>(MainMenuFrame.java:65)
    at com.fesca.control.listener.CheckingRehabDateListener.run(CheckingRehabDateListener.java:287)
zlwx9yxi

zlwx9yxi1#

线程“Thread-5”java.time.格式出现异常。无法在索引16处解析文本“2015-11- 21 T14:15”
变更

yyyy-MM-dd'T'HH:mm:ss

yyyy-MM-dd'T'HH:mm

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm", Locale.US);

由于您最多格式化分钟(2015-11-21T14:15),因此仅不包括秒(ss
或者加上秒部分。

k10s72fa

k10s72fa2#

您的日期字符串中有时没有ss,如生成日期-2015-11-21T14:15时出错所示。请使用yyyy-MM-dd'T'HH:mm代替yyyy-MM-dd'T'HH:mm:ss

dfty9e19

dfty9e193#

您不需要DateTimeFormatter

java.time API基于ISO 8601,因此您不需要DateTimeFormatter来解析已经采用ISO 8601格式的日期-时间字符串(例如2015-11-21T14:15)。

你的模式有什么问题?

您的日期-时间字符串没有秒,但您使用了ss。您的模式yyyy-MM-dd'T'HH:mm:ss可以在删除:ss后使用。

演示

class Main {
    public static void main(String args[]) {
        String strDateTime = "2015-11-21T14:15";
        LocalDateTime ldt = LocalDateTime.parse(strDateTime);
        System.out.println(ldt);

        // Parsing with your pattern after correction
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm");
        System.out.println(LocalDateTime.parse(strDateTime, formatter));
    }
}

输出

2015-11-21T14:15
2015-11-21T14:15

要了解有关现代日期-时间API的更多信息,请访问**Trail: Date Time**。

相关问题