我正在Android上創建一個與服務器通信的應用程序。該服務器給我回了ISO 8601日期字符串,如下所示:如何在Android上解析ISO 8601字符串到Java日期
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());
事情是,此解決方案部分工作。我能夠正確地得到年,月,日和小時,但是當它達到幾小時,幾分鐘和幾秒時,我總是得到錯誤的分鐘。如果我嘗試使用我的示例String來打印它,我會得到類似於「12:35」而不是「12:24」的內容。我嘗試過不同的面具,使用Locale,而不是使用Locale,而且沒有任何東西可以用於我。
我已經看到了這個link該SimpleDateFormatter不支持ISO 8601的非常好,那傢伙給使用javax.xml.bind.DatatypeConverter.parseDateTime()方法的解決方案,但DatatypeConverter上不存在Android SDK。所以...我能做些什麼來正確解析這個字符串?
您的示例中缺少'T',確實是ISO 8601 ...但是您的格式似乎可以處理此問題。 SimpleDateFormat的例子只使用一個'Z'字符,也許這就是問題所在?此外,你有太多的'...'從來沒有超過3位數,所以'SSS'應該做的。 – haraldK 2014-11-21 15:24:11
那麼,我已經嘗試了很多不同的面具,而使用三重S的面具會引發異常。我也嘗試使用一個Z,它不起作用。 – Mauker 2014-11-21 23:07:57