在android中解析日期

发布于 2024-11-29 07:48:46 字数 319 浏览 1 评论 0原文

我有以下代码来传递日期

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

第几種人 2024-12-06 07:48:46

您在异常消息的末尾缺少日期格式的时区,即“CEST”部分。
您的代码

DateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy kk:mm:ss", Locale.getDefault());

应该是

DateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy kk:mm:ss z", Locale.getDefault());

您可能想阅读 SimpleDateFormat

编辑
在本页底部,时区格式的解释更加清晰
更清晰的时区格式

You're missing the timezone in the date format at the end, in your exception message, the "CEST" part.
Your code

DateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy kk:mm:ss", Locale.getDefault());

should be

DateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy kk:mm:ss z", Locale.getDefault());

You might want to read SimpleDateFormat

Edit
At the bottom of this page, the timezone format is more cleary explained
Clearer Timezone format

云归处 2024-12-06 07:48:46

我认为你需要在最后添加 zzz (对于时区):

"EEE, dd MMM yyyy kk:mm:ss zzz"

I think you need to add zzz in the end (for timezone):

"EEE, dd MMM yyyy kk:mm:ss zzz"
葬﹪忆之殇 2024-12-06 07:48:46

如果您的 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 的解决方案

使用具有所需模式和英语 LocaleDateTimeFormatter,例如 DateTimeFormatter.ofPattern("EEE, dd MMM uuuu HH:mm :ss z", Locale.ENGLISH) 来解析您的日期时间字符串。

演示:

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("EEE, dd MMM uuuu HH:mm:ss z", Locale.ENGLISH);
        ZonedDateTime zdt = ZonedDateTime.parse("Fri, 12 Aug 2011 15:34:47 CEST", dtf);
        System.out.println(zdt);
    }
}

输出:

2011-08-12T15:34:47+02:00[Europe/Paris]

在线演示

注意:如果由于某种原因,您需要 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 legacy java.util date-time API. Any new code should use the java.time API.

Solution using modern date-time API

Use a DateTimeFormatter with the required pattern and an English Locale, e.g. DateTimeFormatter.ofPattern("EEE, dd MMM uuuu HH:mm:ss z", Locale.ENGLISH) to parse your date-time string.

Demo:

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("EEE, dd MMM uuuu HH:mm:ss z", Locale.ENGLISH);
        ZonedDateTime zdt = ZonedDateTime.parse("Fri, 12 Aug 2011 15:34:47 CEST", dtf);
        System.out.println(zdt);
    }
}

Output:

2011-08-12T15:34:47+02:00[Europe/Paris]

Online Demo

Note: If for some reason, you need an instance of java.util.Date, let java.time API do the heavy lifting of parsing your date-time string and convert zdt from the above code into a java.util.Date instance using Date date = Date.from(zdt.toInstant()).

Learn more about the modern Date-Time API from Trail: Date Time.

蓝颜夕 2024-12-06 07:48:46

日期字符串不是您指定的格式。注意最后的时区吗?

The date string is not in the format you specified. Notice the time zone at the end?

坚持沉默 2024-12-06 07:48:46

您可能需要: 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());

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文