java - 如何在 Android 上将 ISO 8601 字符串解析为 Java 日期

标签 java android date

<分区>

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

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

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

        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”的内容。我尝试了不同的掩码,使用区域设置,不使用区域设置,但似乎对我没有任何作用。

我在这个link 上看到过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");

关于java - 如何在 Android 上将 ISO 8601 字符串解析为 Java 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27064441/

相关文章:

java - 尝试显示所有可能的配料组合

java - 线性布局不可见/重叠

Java Socket ] DataInputStream 实例打印 continue null

java - 如何知道 Java 套接字已死

android - 在 Android 项目中使用 Espresso 2.0 + Roboelectric

android - 如何更改我的 Android 应用程序中所有文本的默认颜色?

php - php date() 和 time() 函数的可移植性

Java 日期解析 - 即使在 "wrong"情况下也能工作

java - Epson SDK 版本 2 收银抽屉适用于 Android?

sql-server - 将vba中的日期变量传递给sql语句