Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dd MMM yyyy格式的java.time.format.DateTimeParseException_Java_Date_Parsing_Datetime_Java Time - Fatal编程技术网

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

dd MMM yyyy格式的java.time.format.DateTimeParseException,java,date,parsing,datetime,java-time,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) { /

我正在尝试分析
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-MM-yyyy
格式的解析失败。我也厌倦了设置
Locale.US
,但在那种情况下也失败了

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

您可以通过使用和调用来构造不区分大小写的解析器:

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

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


真是一团糟。Oracle拒绝在这里进行改进,请参见
DateTimeFormatter dTF = 
    new DateTimeFormatterBuilder().parseCaseInsensitive()
                                  .appendPattern("dd-MMM-yyyy")
                                  .toFormatter();