尝试String to Date解析时出现Java ParseException

时间:2011-10-06 02:36:03

标签: java android simpledateformat 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文档之后,我发现了这个:

所有响应日期时间值均为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格式方法的任何建议吗?

5 个答案:

答案 0 :(得分:11)

你可以尝试:

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可以正确解释它(如果有人知道的话,我很想知道处理这个位的更简洁方法)。

答案 1 :(得分:2)

尝试,

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");

答案 2 :(得分:1)

此模式应解析您提供的日期:"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或不再格式化 如果你有太多的模式可以实现,你可以自己解析它或尝试these libraries之一。

答案 3 :(得分:0)

这对我有用

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

答案 4 :(得分:0)

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