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

时间:2014-11-21 15:11:46

标签: java android date

我正在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,似乎没有任何东西适合我。

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

1 个答案:

答案 0 :(得分:4)

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

以某种方式抛弃微秒,然后使用SSS。

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