无法解析的日期格式

时间:2020-07-27 11:56:12

标签: java date simpledateformat dateparser

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

java.text.ParseException:无法解析的日期:“ 1997年10月1日,上午12:00:00”

这是我用来解析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 AM,而dateFormatMMM d, yyyy, HH:mm:ss a

为什么无法解析日期?

3 个答案:

答案 0 :(得分:3)

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

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

对于12:00时间,它预计将是下午。如果您的意思是午夜,则应该是00:00 AM。

答案 1 :(得分:2)

我想您应该使用“ h”而不是“ H”。小写字母h表示0-12大写字母,一个字母表示0-24。 总体来说应该 MMM d, yyyy, hh:mm:ss a

答案 2 :(得分:2)

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

具体来说,如果小时格式介于0-23之间,则字符串为HH,但是如果您使用的是下午1-12 AM,则必须使用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