如何在Android上解析ISO 8601字符串到Java日期

我正在Android上创建一个与服务器通信的应用程序。 该服务器给我一个ISO 8601日期字符串,如下所示:

2014-11-21 12:24:56.662061-02

然后我尝试使用Java的SimpleDateFormatter来解析我的String,如下所示:

  Locale l = new Locale("pt","BR"); Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSSZZ",l).parse(str_date); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(date.getTime()); 

事实是,这个解决方案部分工作。 我能够正确地获得年,月,日和小时,但是当它达到小时,分钟和秒时,我总是错误地分钟。 如果我尝试使用我的示例字符串打印它,我会得到类似“12:35”而不是“12:24”的内容。 我尝试过不同的面具,使用Locale,而不是使用Locale,似乎没有什么对我有用。

我在这个链接上看到SimpleDateFormatter不能很好地支持ISO 8601,那个人使用javax.xml.bind.DatatypeConverter.parseDateTime()方法给出了解决方案,但Android SDK上没有DatatypeConverter。 那么……我能做些什么来正确解析这个字符串?

S是毫秒; 662061是662秒= 11分钟。

不知怎的,扔掉微秒,并使用SSS。

 str_date = str_date.replaceFirst("(\\d\\d[\\.,]\\d{3})\\d+", "$1");