在android中解析日期
我有以下代码来传递日期
DateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy kk:mm:ss", Locale.getDefault());
Date _pubDate = df.parse(_pubDateE.getFirstChild().getNodeValue());
但出现此错误:
java.text.ParseException: Unparseable date: "Fri, 12 Aug 2011 15:34:47 CEST"
出了什么问题?
I have the following code to pase a date
DateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy kk:mm:ss", Locale.getDefault());
Date _pubDate = df.parse(_pubDateE.getFirstChild().getNodeValue());
But I get this error:
java.text.ParseException: Unparseable date: "Fri, 12 Aug 2011 15:34:47 CEST"
What is wrong ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您在异常消息的末尾缺少日期格式的时区,即“CEST”部分。
您的代码
应该是
您可能想阅读 SimpleDateFormat
编辑
在本页底部,时区格式的解释更加清晰
更清晰的时区格式
You're missing the timezone in the date format at the end, in your exception message, the "CEST" part.
Your code
should be
You might want to read SimpleDateFormat
Edit
At the bottom of this page, the timezone format is more cleary explained
Clearer Timezone format
我认为你需要在最后添加
zzz
(对于时区):I think you need to add
zzz
in the end (for timezone):如果您的 JVM 的默认
Locale
是非英语区域设置,您的代码将引发异常,因为您的日期时间字符串“Fri, 12 Aug 2011 15:34:47 CEST”是英语。您必须使用英语语言环境,例如Locale.ENGLISH
与解析器对象。要了解更多信息,请查看始终为自定义格式指定带有日期时间格式化程序的区域设置。java.time
2014 年 3 月,Java 8 引入了现代的
java.time
日期时间 API,它取代了 容易出错的遗留java.util
日期时间 API。任何新代码都应使用java.time
API。使用现代日期时间 API 的解决方案
使用具有所需模式和英语
Locale
的DateTimeFormatter
,例如DateTimeFormatter.ofPattern("EEE, dd MMM uuuu HH:mm :ss z", Locale.ENGLISH)
来解析您的日期时间字符串。演示:
输出:
在线演示
注意:如果由于某种原因,您需要
java.util.Date
的实例,请让java.time
API 完成解析日期时间的繁重工作字符串并转换使用Date date = Date.from(zdt.toInstant())
将上述代码中的zdt
转换为java.util.Date
实例。通过Trail: Date Time<了解有关现代日期时间 API 的更多信息/a>。
If your JVM's default
Locale
is a non-English locale, your code will throw an exception because your date-time string, "Fri, 12 Aug 2011 15:34:47 CEST" is in English. You have to use an English locale e.g.Locale.ENGLISH
with the parser object. To learn more about it, check Always specify a Locale with a date-time formatter for custom formats.java.time
In March 2014, Java 8 introduced the modern,
java.time
date-time API which supplanted the error-prone legacyjava.util
date-time API. Any new code should use thejava.time
API.Solution using modern date-time API
Use a
DateTimeFormatter
with the required pattern and an EnglishLocale
, e.g.DateTimeFormatter.ofPattern("EEE, dd MMM uuuu HH:mm:ss z", Locale.ENGLISH)
to parse your date-time string.Demo:
Output:
Online Demo
Note: If for some reason, you need an instance of
java.util.Date
, letjava.time
API do the heavy lifting of parsing your date-time string and convertzdt
from the above code into ajava.util.Date
instance usingDate date = Date.from(zdt.toInstant())
.Learn more about the modern Date-Time API from Trail: Date Time.
日期字符串不是您指定的格式。注意最后的时区吗?
The date string is not in the format you specified. Notice the time zone at the end?
您可能需要:
new SimpleDateFormat("EEE, dd MMM yyyy kk:mm:ss zzz", Locale.getDefault());
You probably want:
new SimpleDateFormat("EEE, dd MMM yyyy kk:mm:ss zzz", Locale.getDefault());