尝试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(); }