转换日期时出错:JAVA中无法解析日期

问题描述 投票:0回答:2

我找不到问题所在。我正在尝试转换日期:

“2014 年 7 月 10 日星期四 13:33:26 +0200”

使用以下代码从字符串到日期:

String formatType = "EEE, dd MMM yyyy HH:mm:ss Z";
Date startzeit = new SimpleDateFormat(formatType).parse(einsatz.getString("startzeit"));

但是我得到了这个例外:

java.text.ParseException: Unparseable date: "Thu, 10 Jul 2014 13:33:26 +0200"

java android parsing date exception
2个回答
6
投票

您正在创建一个

SimpleDateFormat
而不指定区域设置,因此它将使用默认区域设置。从变量名的外观来看,这可能不是英语 - 所以解析“Thu”和“Jul”会很困难。

尝试:

String formatType = "EEE, dd MMM yyyy HH:mm:ss Z";
Date startzeit = new SimpleDateFormat(formatType, Locale.US)
                        .parse(einsatz.getString("startzeit");

(这对我有用,具有您的样本值。)


0
投票

java.time

2014 年 3 月,Java 8 引入了现代的

java.time
日期时间 API,取代了容易出错的旧版
java.util
日期时间 API
。任何新代码都应使用
java.time
API。

使用现代日期时间 API 的解决方案

您可以使用内置的

OffsetDateTime
 将日期时间字符串解析为 
DateTimeFormatter#RFC_1123_DATE_TIME

演示:

class Main {
    public static void main(String args[]) {
        OffsetDateTime odt = OffsetDateTime.parse("Thu, 10 Jul 2014 13:33:26 +0200",
                DateTimeFormatter.RFC_1123_DATE_TIME);
        System.out.println(odt);
    }
}

输出:

2014-07-10T13:33:26+02:00

在线演示

注意: 如果由于某种原因,您需要

java.util.Date
的实例,请让
java.time
API 完成解析日期时间字符串的繁重工作,并将上述代码中的
odt
转换为
java.util.Date
实例使用
Date date = Date.from(odt.toInstant())

Trail:日期时间

了解有关现代日期时间 API 的更多信息
© www.soinside.com 2019 - 2024. All rights reserved.