【问题标题】:java.time.format.DateTimeParseException for dd-MMM-yyyy format [duplicate]dd-MMM-yyyy 格式的 java.time.format.DateTimeParseException [重复]
【发布时间】:2016-07-06 07:13:03
【问题描述】:

我正在尝试解析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,但在那种情况下它也失败了。

【问题讨论】:

    标签: java date parsing datetime java-time


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 真是一团糟。 Oracle 拒绝在这里进行改进,请参阅this JDK-bug-log
    猜你喜欢
    • 1970-01-01
    • 2018-02-14
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2021-07-18
    相关资源
    最近更新 更多