DateFormat无法正确解析日期

时间:2017-02-15 10:49:48

标签: java simpledateformat

我正在尝试解析类型为“Mar 28,2017 13:00”的Java Date Strings。

我写了以下代码

        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”

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

3 个答案:

答案 0 :(得分:1)

问题在于您如何编写日期和时间模式。它应该是

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

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

干杯!!!

答案 1 :(得分:1)

解决方案是纠正模式:

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"表示周年日(或称为基于周的年)。它不是日历年,只能以合理的方式与周和周和日合并。但是您的模式只包含月份和日期,因此SimpleDateFormat只使用一年中的默认值(= 1)和星期几(=星期日),并隐含地使用美国标准周定义(从星期日开始的几周)。这导致2017年基于周的第一个日历周,因此观察日期为2017-01-01。

使用符号" y"相反,这意味着年代(这里:正常的日历年)。

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

答案 2 :(得分:0)

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