2017-02-15 110 views
0

我试图解析Java类型“​​Mar 28,2017 13:00”类型的字符串。DateFormat没有正确解析日期

我写下面的代码

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

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

有关可能出错的任何想法吗?

+0

那么你想分析什么'dateTime'? – nbokmans

+1

dateTime是类型为“Mar 28,2017 13:00”的字符串。输入保证采用这种格式。 – D159

+0

你想要的输出格式是什么? – user3040153

回答

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

错误,请参阅我的答案。 –

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

改为使用符号“y”代表年份(此处为正常日历年)。

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