我正在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上。那么......我能做些什么来正确解析这个字符串?
答案 0 :(得分:4)
S
是毫秒; 662061是662秒= 11分钟。
以某种方式抛弃微秒,然后使用SSS。
str_date = str_date.replaceFirst("(\\d\\d[\\.,]\\d{3})\\d+", "$1");