Java报错”DateTimeParseException”的原因以及解决办法

  • Post category:Java

针对Java中的”DateTimeParseException”异常错误,我来为您简单介绍一下。

异常原因

Java中的”DateTimeParseException”异常是在当字符串无法被解析为指定格式的日期时间时抛出异常,出现该异常的原因可能有以下几种情况:

  1. 输入的日期时间字符串格式不符合预期,例如无法解析”2021AA01BB01″这样的字符串
  2. 解析的日期时间格式与输入字符串不匹配,例如解析时使用的日期时间格式为”yyyy/MM/dd”,但输入的字符串格式为”yyyy年MM月dd日”
  3. 输入字符串中包含了不存在的月份等不合法的日期时间信息

解决办法

针对出现”DateTimeParseException”异常的情况,我们可以采取以下解决办法:

  1. 确保输入的日期时间字符串格式符合预期,例如日期格式为”yyyy-MM-dd HH:mm:ss”,则输入的日期时间字符串应该格式正确,不应该包含其他无效字符
  2. 确保解析的日期时间格式与输入字符串匹配,如前述例子,如果输入的日期时间字符串格式为”yyyy年MM月dd日”,则需要使用对应的解析格式进行解析
  3. 对于不合法的日期时间信息,可以尽量避免其出现,或者在解析时进行相关处理,例如使用Java 8中的DateTimeFormatter类,指定严格的解析模式,以便发现不合法的信息从而避免异常的出现。

下面是两个例子:

示例一

输入的日期字符串”2021aa01bb”包含了不应该存在的字符,导致无法解析,发生”DateTimeParseException”异常。

public class Example1 {

    public static void main(String[] args) {
        String dateStr = "2021aa01bb";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate date = LocalDate.parse(dateStr, formatter);
        System.out.println(date);
    }
}

执行结果:

Exception in thread "main" java.time.format.DateTimeParseException: Text '2021aa01bb' could not be parsed at index 4

解决方法:修正输入的字符串,保证日期字符串的格式正确。

public class Example1Solution {

    public static void main(String[] args) {
        String dateStr = "2021-01-01";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate date = LocalDate.parse(dateStr, formatter);
        System.out.println(date);
    }
}

执行结果:

2021-01-01

示例二

当解析器的解析格式与输入字符串的格式不匹配时,会出现”DateTimeParseException”异常。

public class Example2 {

    public static void main(String[] args) {
        String dateStr = "2021-01-01";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
        LocalDate date = LocalDate.parse(dateStr, formatter);
        System.out.println(date);
    }
}

执行结果:

Exception in thread "main" java.time.format.DateTimeParseException: Text '2021-01-01' could not be parsed: Invalid number of '-' characters, expected 2 but got 1

解决方法:调整解析器的解析格式,与输入字符串的格式一致。

public class Example2Solution {

    public static void main(String[] args) {
        String dateStr = "2021-01-01";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate date = LocalDate.parse(dateStr, formatter);
        System.out.println(date);
    }
}

执行结果:

2021-01-01

希望这些解释能有所帮助。