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

时间:2016-03-19 14:22:52

标签: java date parsing datetime 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());

    }
}

抛出以下异常

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)

它解析dd-MM-yyyy格式的罚款,但以dd-MMM-yyyy格式失败。我也累了设置Locale.US,但在那种情况下它也失败了。

1 个答案:

答案 0 :(得分:7)

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

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

  

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

     

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

DateTimeFormatter dTF = 
    new DateTimeFormatterBuilder().parseCaseInsensitive()
                                  .appendPattern("dd-MMM-yyyy")
                                  .toFormatter();