例外无法解释的日期

时间:2014-03-27 12:58:21

标签: java android

 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:Unparseable date:“2014-03-27T11:31:42.798Z” (抵消23)

3 个答案:

答案 0 :(得分: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不支持此功能。

答案 1 :(得分: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是TimeZone。

答案 2 :(得分:2)

偏移23与日期字符串末尾的Z相关。 Z旨在通过RFC822Timezone指定时区。查看official documentation以获取有关时区的参考信息。