dd-MMM-yyyy格式的java.time.format.DateTimeParseException

q12*_*26y 6 java datetime parsing date java-time

我正在尝试解析dd-MMM-yyyy格式的日期.

package com.company;

import javax.swing.text.DateFormatter;
import java.time.format.DateTimeFormatter;

import java.time.*;
import java.util.Locale;

public class Main {

    public static void main(String[] args) {
        // write your code here
        MonthDay m;
        Locale.setDefault(Locale.ENGLISH);
        DateTimeFormatter dTF = DateTimeFormatter.ofPattern("dd-MMM-yyyy");
        String dateString = "12-jan-1900";

        try
        {
            LocalDate ddd = LocalDate.parse(dateString,dTF);
            System.out.println(ddd.toString());
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        //System.out.println(d.toString());

    }
}
Run Code Online (Sandbox Code Playgroud)

它抛出以下异常

java.time.format.DateTimeParseException: Text '12-jan-1900' could not be parsed at index 3
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
    at java.time.LocalDate.parse(LocalDate.java:400)
    at com.company.Main.main(Main.java:20)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Run Code Online (Sandbox Code Playgroud)

它解析dd-MM-yyyy格式很好,但格式化失败dd-MMM-yyyy.我Locale.US也厌倦了设置,但在那种情况下它也失败了.

Tun*_*aki 8

原因是默认情况下解析区分大小写,并且格式化程序无法识别"jan".它只会认出来"Jan".

您可以使用DateTimeFormatterBuilder和调用来构造不区分大小写的解析器parseCaseInsensitive():

将解析样式更改为格式化程序的其余部分不区分大小写.

解析可以区分大小写或不区分大小写 - 默认情况下区分大小写.此方法允许更改解析的区分大小写设置.

DateTimeFormatter dTF = 
    new DateTimeFormatterBuilder().parseCaseInsensitive()
                                  .appendPattern("dd-MMM-yyyy")
                                  .toFormatter();
Run Code Online (Sandbox Code Playgroud)

  • 真是一团糟。并且 Oracle 拒绝在此处进行改进,请参阅 [此 JDK-bug-log](https://bugs.openjdk.java.net/browse/JDK-8141245) (3认同)