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);
                }


try {} catch {}有异常:03-27 16:29:48.459:D / myLog(19388):dateExcep java.text.ParseException:无法解析的日期:“ 2014-03-27T11:31:42.798Z”(偏移量23)

最佳答案

格式模式中的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目前不支持。

09-28 04:34