Java 不可解析日期格式

Java 不可解析日期格式,java,date,simpledateformat,dateparser,Java,Date,Simpledateformat,Dateparser,我试图分析日期字符串,但出现以下错误: java.text.ParseException:不可解析日期:1997年10月1日上午12:00:00 这是我用来解析日期的方法: 其中,日期字符串为1997年10月1日12:00:00 AM,日期格式为MMM d,yyyy,HH:mm:ss a 为什么它不能解析日期?我想你应该用h而不是h。小写的h表示0-12,大写的1表示0-24。 总的来说应该是这样 mmmd,yyyy,hh:mm:ss a我想你应该用h而不是h。小写的h表示0-12,大写的1表示

我试图分析日期字符串,但出现以下错误:

java.text.ParseException:不可解析日期:1997年10月1日上午12:00:00

这是我用来解析日期的方法:

其中,日期字符串为1997年10月1日12:00:00 AM,日期格式为MMM d,yyyy,HH:mm:ss a


为什么它不能解析日期?

我想你应该用h而不是h。小写的h表示0-12,大写的1表示0-24。 总的来说应该是这样
mmmd,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。

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

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

12:00的时间预计是下午。如果您的意思是午夜,那么应该是凌晨00:00。

您的代码引发了一个异常,因为字符串日期对于字符串模式无效,请查看文档

具体来说,如果小时的格式在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代码:


您的代码引发异常,因为字符串日期对于字符串模式无效,请查看文档

具体来说,如果小时的格式在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代码:


此代码是否在非EN语言环境的计算机上运行?是否应为MMM dd,yyyy,HH:mm:ss a,因为天数可以是两位数?第一个问题为否。dd似乎是for,似乎只是添加了0填充。此代码是否在非EN语言环境的计算机上运行?是否应该是MMM dd,yyyy,HH:mm:ss a,因为天可以是两位数?第一个问题为否。dd似乎是for,似乎只是添加了0填充。