2016-04-19 37 views
1

我试图解析格式化的日期回Date对象,但我一直遇到例外情况,这里是我的代码:解析日期字符串

DateFormat dateFormat = new SimpleDateFormat("MMMM d, yyyy ", Locale.ENGLISH); 
date = dateFormat.parse(dateString); 

当我尝试的日期一样Apr 17, 2016它给了我一个ParserException到说Unparseable date: "Apr 17, 2016" (at offset 12)

+0

ü可以尝试只用3女士'的SimpleDateFormat( “MMM d,YYYY”,Locale.ENGLISH)' –

+2

“MMMM “意思是”全月名“,意思是”四月“而不是”四月“。你想要“MMM”意思是“缩写月份名称”。 *总是*在针对这类问题运行时,根据文档检查格式。另外请注意,您的模式中有一个尾随空格,您的实际文本中似乎没有这个空格。 –

回答

2

当你提供一个日期格式字符串,所有字符必须考虑所有的文字中以某种方式,包括字面空格字符在内的dateString

你必须在你的格式字符串的结尾空格字符:

"MMMM d, yyyy " 

删掉空间(或包括您dateString字符串末尾有一个空格)。

The format strings MMMM or MMM will parse Apr just fine

文本:对于格式化,如果模式字母的数目是4或更多,则使用完整形式;否则使用简短或缩写形式。为了解析,两种形式都被接受,与模式字母的数量无关。

+0

空间是问题,非常感谢。 – Chrometobia

0

尝试如下

DateFormat dateFormat = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH); 

Date date = dateFormat.parse(dateString); 
+0

没有解释,也没有更改他的代码。 -1。 –

+0

在日期前添加'日期' –

+0

其不工作 – Chrometobia

2

你有一个小捆绑在你的日期面膜:将最后一个空白实在是太多了:

DateFormat dateFormat = new SimpleDateFormat("MMMM d, yyyy ", Locale.ENGLISH); 

它应该是:

DateFormat dateFormat = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH); 

这就是为什么错误指向“偏移12“:DateFormat需要在该位置留空。

1

您需要删除字符串格式上的最后一个空格。

你确实有

DateFormat dateFormat = new SimpleDateFormat("MMMM d, yyyy ", Locale.ENGLISH); 

它应该是

DateFormat dateFormat = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);