SimpleDateFormat无法将字符串解析为Date

时间:2015-12-06 05:41:57

标签: java

我很惭愧地问这个问题,但我别无选择。

我想将此字符串转换为日期:

 2015-11-25T19:36:39.571+06:00

要转换它我使用SImpleDateFormat:

String str = "2015-11-25T19:36:39.571+06:00";       

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

Date date = format.parse(str);

System.out.println(date);

当我启动此代码时,它会向我提供java.text.ParseException: Unparseable date:例外。

我不知道为什么会这样。

5 个答案:

答案 0 :(得分:2)

这应该有效(在java 7中)

    String str = "2015-11-25T19:36:39.571+06:00";       

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
    Date date = format.parse(str);

    System.out.println(date);

XXX 在Java 7中可用作时区偏移量,请参阅Javadoc http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

答案 1 :(得分:1)

问题是因为使用了错误的模式.Z代替 yyyy-MM-dd' HH:mm:ss.SSSZ 使用模式 yyyy-MM- DD' T' HH:MM:ss.SSSX

Z代表 RFC 822时区格式的时区,即像-0800

因此,您的代码将如下所示。

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");

答案 2 :(得分:1)

您的模式并不完全对应于输入字符串,您在格式的时区部分中有一个轻微的类型。

按以下方式更改格式以使其正常工作:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

或者将输入字符串更改为:

String str = "2001-07-04T12:08:56.235-07:00"; 

答案 3 :(得分:1)

请使用Below Pattern,它可以正常使用

“YYYY-MM-dd'T'HH:MM:ss.SSSXXX”

答案 4 :(得分:0)

根据您使用的模式,您的输入字符串存在问题。 删除最后一个':'来自str变量。 改变:

    String str = "2015-11-25T19:36:39.571+06:00"; 

in to:

    String str = "2015-11-25T19:36:39.571+0600"; 

然后跑。它会起作用。 这是小提琴: working link