Java 异常不可解析日期

Java 异常不可解析日期,java,android,Java,Android,try{}catch{}have exception:03-27 16:29:48.459:D/myLog(19388):dateExcep java.text.ParseException:Unparseable date:“2014-03-27T11:31:42.798Z”(在偏移量23处)trySimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd'HH:MM:ss.SSS'Z”) 而不是 SimpleDateFormat readDat

try{}catch{}have exception:03-27 16:29:48.459:D/myLog(19388):dateExcep java.text.ParseException:Unparseable date:“2014-03-27T11:31:42.798Z”(在偏移量23处)

try
SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd'HH:MM:ss.SSS'Z”)

而不是

SimpleDateFormat readDate=新的SimpleDateFormat(“yyyy-MM-dd'T'HH:MM:ss.SSSZ”)


其中Z是时区。

格式模式中的
Z
是问题所在。这表示RFC 822时区,它不能只是
Z
。如果您的输入始终以UTC为单位,则可以使用:

 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);
                }
请注意,在此处设置时区非常重要,否则它将假定该值位于当前系统时区中


在中,您可以使用
X
来表示ISO-8601时区偏移说明符,但现在不支持该说明符。

offset 23与日期字符串末尾的
Z
相关
Z
用于将时区指定为。检查时区的参考

// 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"));