2014-03-27 69 views
0
SimpleDateFormat readDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
    String dtc = "2014-03-27T11:31:42.798Z"; 

      Date date = null; 
       try { 
        date = readDate.parse(dtc); 
       } catch (ParseException e) { 
        Log.d("myLog", "dateExcep " + e); 
       } 

尝试{}赶上{}有例外:03-27 16:29:48.459:d/myLog(19388):dateExcep java.text.ParseException:不可解析日期:“2014-03-27T11 :31:42.798Z”(在偏移23)异常无法解析日期

回答

3

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

代替

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

当Z是时区。

4

您的格式模式中的Z是问题所在。这代表了一个RFC 822时区,它不能仅仅是Z。如果你的输入将始终是UTC,你可以使用:

// The Z is now quoted as a literal. 
SimpleDateFormat readDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
readDate.setTimeZone(TimeZone.getTimeZone("Etc/UTC")); 

注意,它在这里设置时区,否则它会假设值是在当前系统的时区是很重要的。

"normal" Java 7中,您可以使用X代替ISO-8601时区偏移说明符,但Android SimpleDateTime不支持该功能。