无法解析的日期格式

Unparsable date format

我正在尝试解析日期字符串但出现此错误:

java.text.ParseException: Unparseable date: "Oct 1, 1997, 12:00:00 AM"

这是我用来解析 Date:

的方法
public static Date parse(@NonNull String dateString, @NonNull String dateFormat) {
    val sdf = new SimpleDateFormat(dateFormat);
    sdf.setLenient(false);
    try {
        return sdf.parse(dateString);
    } catch (ParseException e) {
        return null;
    }
}

其中 dateStringOct 1, 1997, 12:00:00 AMdateFormatMMM d, yyyy, HH:mm:ss a

为什么无法解析日期?

我猜你应该用“h”而不是“H”。小写 h 表示 0-12,大写 1 表示 0-24。 总体应该是 MMM d, yyyy, hh:mm:ss a

如果将 SimpleDateFormat 更改为 DateTimeFormatter,异常会显示错误:

Caused by: java.time.DateTimeException: Conflict found: Field AmPmOfDay 1 differs from AmPmOfDay 0 derived from 12:00

预计 12:00 时间是下午。如果您指的是午夜,则应该是 00:00 上午。

您的代码抛出异常,因为字符串 Date 对于字符串模式无效,请查看文档 here

具体来说,如果小时的格式介于 0-23 之间,则字符串为 HH,但如果您使用 1-12 AM,PM 则必须使用 hh

这是一些参考代码:

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        Date x = parse("Oct 1, 1997, 12:00:00 AM", "MMM d, yyyy, hh:mm:ss a");
        System.out.println("X String: " + x); 
    }
    
    public static Date parse(String dateString, String dateFormat) {
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        sdf.setLenient(false);
        try {
            return sdf.parse(dateString);
        } catch (Exception e) {
            System.out.println("E???");
            return null;
        }
    }
}

如果你需要编辑,这里是ideone代码:

https://ideone.com/ccwo2Y