尝试String to Date解析时出现Java ParseException
我很难解析/格式化从Web服务收到的日期字符串。 我试过多种方法,但没有运气。
示例日期字符串:
2011-10-05T03:00:00Z
例外:
W/System.err(10072): java.text.ParseException: Unparseable date: "2011-10-05T05:00:00Z" (at offset 10) W/System.err(10072): at java.text.DateFormat.parse(DateFormat.java:626)
示例代码:
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:SSSS"); Date date = formatter.parse(info.AiringTime);
我发现如果我删除日期和时间之间的“T”并用空格替换它,它将格式化得很好。 有人有什么建议吗?
–UPDATE–
深入研究API文档后,我发现了这个:
所有响应DateTime值均为UTC格式。 您需要应用UTC偏移量来计算显示的本地时间。
DateTime是以下列格式之一指定的日期和时间值:
UTC格式:YYYY-MM-DDThh:mm:ssZ。 例如:2011-03-15T02:00:00Z。
偏移的当地时间:YYYY-MM-DDThh:mm:ss +或 – hh:mm(正偏移或负偏移)。 例如,美国太平洋时间:2011-03-14T06:00:00-08:00。
有关UTC格式方法的任何建议吗?
你可以尝试:
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); String dateString = dateString.replace("Z", "GMT+00:00"); Date date = dateFormat.parse(dateString);
上面的代码应该正确处理在日期中指定时区的情况。 由于Z表示UTC / GMT时区,因此它被GMT取代,因此SimpleDateFormat可以正确解释它(如果有人知道,我很想知道处理这个位的更简洁方法)。
尝试,
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
这种模式应该解析你提供的日期: "yyyy-MM-dd'T'HH:mm:ss'Z'"
。
如果您想使用SimpleDateFormat
并且变换数量有限,则可以为每个模式创建单独的格式化程序并将它们链接起来:
Date date = formatter1.parse(info.AiringTime); if (date == null) { date = formatter2.parse(info.AiringTime); if (date == null) { date = formatter2.parse(info.AiringTime); if (date == null) { date = formatter3.parse(info.AiringTime); } } }
或者将它们放在一个列表中并迭代直到非null或不再格式化。
如果你有太多的模式可以实现,你可以自己解析它或尝试其中一个库 。
这对我有用
SimpleDateFormat isoDateFormat = new SimpleDateFormat("yyyy-mm-dd'T'hh:mm:ss'Z'"); SimpleDateFormat viewFriendlyDateFormat = new SimpleDateFormat("dd/MMM/yyyy hh:mm:ss aaa"); String viewFriendlyDate = ""; try { Date date = isoDateFormat.parse(timestamp); viewFriendlyDate = viewFriendlyDateFormat.format(date); } catch (ParseException e) { e.printStackTrace(); }
SimpleDateFormat isoDateFormat = new SimpleDateFormat("yyyy-mm-dd'T'hh:mm:ss'Z'"); SimpleDateFormat viewFriendlyDateFormat = new SimpleDateFormat("dd/MMM/yyyy hh:mm:ss aaa"); String viewFriendlyDate = ""; try { Date date = isoDateFormat.parse(timestamp); viewFriendlyDate = viewFriendlyDateFormat.format(date); } catch (ParseException e) { e.printStackTrace(); }
- React-native build error Android – java.lang.UnsupportedClassVersionError:com / android / build / gradle / AppPlugin:不支持的major.minor版本52.0
- 添加textView到拖放界面 – Android / Java
- Android camera2镜头内在校准
- 将图片从Android上传到PHP服务器
- 在Android中绘制片段
- 在滚动RecyclerView时更改了Cardview的数据
- 为什么在文件传输完成后我的列表视图条目的内容没有更新?
- 即使使用cancel方法也无法取消AsyncTask中的doInBackground进程
- 从java文件更新文本视图时出错