DateFormat 未正确解析日期

DateFormat Not Parsing Date Correctly

我正在尝试解析为 Java "Mar 28,2017 13:00" 类型的日期字符串。

我写了下面的代码

        DateFormat df = new SimpleDateFormat("MMM dd,YYYY HH:mm");
        System.out.println(df.parse(dateTime));

此代码似乎可以正确解析小时和分钟,但日期始终是 2017 年 1 月 1 日。例如对于上面给出的字符串,输出是 "Sun Jan 01 13:00:00 IST 2017"

关于这里可能有什么问题的任何想法?

    DateFormat df = new SimpleDateFormat("MMM dd,yyyy HH:mm", Locale.ENGLISH);
    System.out.println(df.parse("Mar 28,2017 13:00"));

问题在于您编写日期和时间模式的方式。应该是

DateFormat df = new SimpleDateFormat("MMM dd,yyyy hh:mm");

请参考 http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

干杯!!!

解决办法是更正模式:

DateFormat df = new SimpleDateFormat("MMM dd,yyyy HH:mm", Locale.ENGLISH);
System.out.println(df.parse("Mar 28,2017 12:00"));
// Tue Mar 28 12:00:00 CEST 2017

解释:用符号"Y"表示year-of-weekdate(或称为week-based-year)。它不是日历年,只能以合理的方式与 week-of-year 和 day-of-week 组合。但是您的模式仅包含月份和 day-of-month,因此 SimpleDateFormat 仅使用 week-of-year (=1) 和 day-of-week (=Sunday) 的默认值,并隐式地使用 US-standard week-definition(从周日开始的周)。这导致 2017 年 week-based-year 的第一个日历周,因此观测日期为 2017-01-01。

使用符号 "y" 代替,这意味着 year-of-era(此处:正常日历年)。

注意: 与@Shamil Sungatov 接受的答案相比,我为小时部分选择了模式字母 "HH",而不是 "hh"( 12-hour-clock).如果要解析的时钟小时的值为 12(将以不同的方式解释,即在 "hh" 的情况下为午夜),则这是相关的。