Java:无法解析的日期异常错误

时间:2015-09-23 14:53:49

标签: java simpledateformat

我无法将字符串解析为日期

public class Main {
    public static void main(String s[])
    {
        SimpleDateFormat mdyFormat1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm.ss.SSSZ");
        String date="2015-08-27T11:46:35.336Z";

        try {
            Date date1=mdyFormat1.parse(date);
            System.out.println(date1);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

收到错误

java.text.ParseException: Unparseable date: "2015-08-27T11:46:35.336Z"
    at java.text.DateFormat.parse(Unknown Source)
    at com.connectm.onprocess.logincontroller.Main.main(Main.java:14)

3 个答案:

答案 0 :(得分:1)

你有两个问题:

  1. 2015-08-27T11:46:35.336Z,冒号(:)在46到35之间,应该是。 (点)。至于格式new SimpleDateFormat("yyyy-MM-dd'T'HH:mm.ss.SSSZ")。所以它应该是2015-08-27T11:46.35.336Z。而Z则是下一个问题。
  2. 字符串末尾的Z也是错误的,应该是" 2015-08-27T11:46.35.336-0800"使它工作。但是,如果您仍然不了解Z部分,请参阅文档http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html#rfc822timezone

答案 1 :(得分:1)

请注意,mdyFormat1对象初始化已从

更改

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

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");

public static void main(String[] args) {
    SimpleDateFormat mdyFormat1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
    String date="2015-08-27T11:46:35.336Z";

    try {
        Date date1=mdyFormat1.parse(date);
        System.out.println(date1);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

输出:

  

8月27日星期四11:46:35 CDT 2015

答案 2 :(得分:1)

正如其他人所指出的,您的格式化模式无法与输入数据匹配。

java.time

此外,您使用的是过时的旧类,这些类已被证明是麻烦,混乱和有缺陷的。在Java 8及更高版本中,它们已被新内置的java.time框架所取代。

您的输入数据采用标准ISO 8601格式。默认情况下,在java.time中使用该格式来解析和生成日期时间值的字符串表示。因此,无需指定格式化程序。

Instant instant = Instant.parse( "2015-08-27T11:46:35.336Z" );
String output = instant.toString();

如果需要,您可以指定时区。

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );