3

我很难解析/格式化从 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”并用空格替换它,它的格式会很好。有人有什么建议吗?

- 更新 -

在深入查看 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 格式方法有什么建议吗?

4

5 回答 5

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

于 2011-10-06T03:08:30.220 回答
2

尝试,

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
于 2011-10-06T03:02:18.573 回答
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);
    }
  }
}

或者将它们放在一个列表中并迭代直到非空或没有更多的格式化程序。
如果您的模式太多而无法实用,您可以自己解析它或尝试其中一个

于 2011-10-06T03:17:56.773 回答
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(); 
} 
于 2017-11-24T13:13:01.603 回答
0

This worked for me

    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();
    }
于 2017-11-24T13:12:37.333 回答