字符串到日期转换中的异常

时间:2013-10-10 05:08:14

标签: java

使用以下代码

解析2013年7月10日星期四时的错误
Date parse = new SimpleDateFormat("EEE d M yyyy").parse("Thu 10 July 2013");

它适用于

new SimpleDateFormat("EEE M yyyy").parse("Thu July 2013");

但如果我把日期(d)放在字符串中,那么它会抛出异常

new SimpleDateFormat("EEE d M yyyy").parse("Thu 10 July 2013");

java.text.ParseException: Unparseable date: "Thu 10 July 2013"

非常感谢

4 个答案:

答案 0 :(得分:3)

尝试将格式扩展为EEE d MMMM yyyy

单个或双M将被中断为数字月份值(即{0}7),MMM将被中断为短月份名称(即Jul)并且MMMM将被中断为完整的月份名称(即July

还应该注意的是,在我的测试MMMMMMM似乎有效

答案 1 :(得分:1)

使用dd代替d以及MMM代替MM:

new SimpleDateFormat("EEE dd MMM yyyy").parse("Thu 10 July 2013");

答案 2 :(得分:0)

我试过了

new SimpleDateFormat("EEE d M yyyy").parse("Thu 10 July 2013");

不起作用因此我将月份格式更改为MMMM

Date parse = new SimpleDateFormat("EEE MMMM yyyy").parse("Thu July 2013");
Date p1 = new SimpleDateFormat("EEE d MMMM yyyy").parse("Thu 10 July 2013");
System.out.println(p1);

这很有效。

答案 3 :(得分:0)

我试试这个,但它会导致运行时异常

java.util.Date  dt = new SimpleDateFormat("EEE M yyyy").parse("Thu July 2013");

根据java docs Oracle Java Doc

如果要使用月份名称(如 7月 7月)来分析日期字符串,则应使用 MMMM MMM 分别。

如果要解析包含月份数的日期,可以使用 M MM .e.g。 (“28 8 2012”)

对于您的情况,您应该使用 MMM或MMMM 而不是M.like this

new SimpleDateFormat("EEE d MMM yyyy").parse("Thu 10 July 2013");

new SimpleDateFormat("EEE d MMMM yyyy").parse("Thu 10 July 2013") ;