尝试从字符串到日期解析时出现 Java ParseException
我很难解析/格式化从网络服务收到的日期字符串。我尝试了多种方法,但没有运气。
示例日期字符串:
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 文档后,我发现:
所有响应日期时间值均采用 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 格式方法有什么建议吗?
I'm having a hard time Parsing/Formatting a Date string received back from a web service. I've attempted multiple approaches, but with no luck.
Sample Date String:
2011-10-05T03:00:00Z
Exception:
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)
Sample Code:
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:SSSS");
Date date = formatter.parse(info.AiringTime);
I've found that if I remove the "T" between the date and the time and replace it with a space, it will format just fine. Anybody have any suggestions?
--UPDATE--
After looking deeper into the API documentation, I found this:
All response DateTime values are in UTC format. You need to apply the UTC offset to calculate the local time for display.
DateTime is a date-and-time value specified in one of the following formats:
UTC format: YYYY-MM-DDThh:mm:ssZ. For example: 2011-03-15T02:00:00Z.
Local time with an offset: YYYY-MM-DDThh:mm:ss + or - hh:mm (positive or negative offset). For example, for US Pacific time: 2011-03-14T06:00:00 -08:00.
Any suggestions on the UTC format approach?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以尝试:
上面的代码应该正确处理在日期中指定时区的情况。由于 Z 代表 UTC/GMT 时区,因此它被 GMT 取代,因此 SimpleDateFormat 可以正确解释它(如果有人知道的话,我很想知道一种更干净的处理方式)。
You could try:
The above code should correctly handle the case where a timezone is specified in the date. As Z represents the UTC/GMT timezone it is replaced by GMT so the SimpleDateFormat can interpret it correctly (i would love to know a cleaner way of handling this bit if anyone knows one).
尝试,
Try,
此模式应解析您提供的日期:
“yyyy-MM-dd'T'HH:mm:ss'Z'”
。如果您想使用
SimpleDateFormat
并且变体数量有限,您可以为每个模式创建单独的格式化程序并将它们链接起来:或者将它们放入列表中并迭代,直到非空或不再有格式化程序.
如果您的模式太多而无法实用,您可以自己解析它或尝试 这些库。
This pattern should parse the date you provide:
"yyyy-MM-dd'T'HH:mm:ss'Z'"
.If you want to use
SimpleDateFormat
and you have a limited number of variations, you can create separate formatters for each pattern and chain them:or put them in a list and iterate until non-null or no more formatters.
If you have too many patterns for this to be practical, you can parse it yourself or try one of these libraries.
这对我有用
This worked for me