我很难解析/格式化从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格式方法的任何建议吗?
答案 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();
}