【发布时间】:2014-11-21 15:11:45
【问题描述】:
我正在 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() 方法给出了解决方案,但是 DatatypeConverter 不存在在 Android SDK 上。那么......我该怎么做才能正确解析这个字符串?
【问题讨论】:
-
您的示例缺少一个“T”,实际上是 ISO 8601...但是您的格式似乎可以处理这个问题。
SimpleDateFormat的示例只使用了一个“Z”字符,也许这就是问题所在?另外,你的“S”太多了...... 永远不会超过 3 位数字,所以“SSS”应该这样做。 -
好吧,我尝试了许多不同的掩码,使用三重 S 的掩码引发了异常。我也尝试使用单个 Z,但它不起作用。