java 解析日期字符串时出错

2ekbmq32  于 2023-01-01  发布在  Java
关注(0)|答案(6)|浏览(266)

我需要将这个字符串解析为日期:
2013年欧洲中部时间6月10日星期一00:00:00
我是这么做的:

SimpleDateFormat sdf = new SimpleDateFormat("ccc MMM dd HH:mm:ss z yyyy");
Date date = sdf.parse(dateString);

但是我得到了一个ParseException

Unparseable date: "Wed Oct 02 00:00:00 CEST 2013" (at offset 0)

有没有人帮忙?

wlzqhblo

wlzqhblo1#

正如其他人所说,您需要EEE而不是ccc--但是您还应该指定一个语言环境,这样它就不会试图使用您的系统默认语言环境来解析月份和日期名称(以及其他内容):

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy",
                                            Locale.US);
hjzp0vay

hjzp0vay2#

您的格式错误。您需要使用EEE而不是ccc,其中E表示Day name in week

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");

查看docs,了解SimpleDateFormat可用的所有有效模式。

nfg76nw0

nfg76nw03#

在模式中将ccc替换为EEE以指定星期几:

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");

示例:https://gist.github.com/kmb385/8781482

k5hmc34c

k5hmc34c4#

更新格式如下:

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
drkbr07n

drkbr07n5#

这是一个Locale问题,因为Locale之间的日期表示方式不同,所以如果Date的格式不正确,JVM就会触发异常。

String str = "Mon Jun 10 00:00:00 EST 2013";
Locale.setDefault(Locale.US);
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
Date date = sdf.parse(str);
System.out.println(date);

IDEone示例可以正常工作,因为默认语言环境为Locale.US

q1qsirdb

q1qsirdb6#

Java.时间

accepted answer使用SimpleDateFormat,这在2014年2月是正确的做法。2014年3月,java.util日期-时间API及其格式化API SimpleDateFormatmodern Date-Time API取代。从那时起,强烈建议停止使用传统日期-时间API。

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

class Main {
    public static void main(String[] args) {
        String stdDateTime = "Mon Jun 10 00:00:00 CEST 2013";
        DateTimeFormatter parser = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z uuuu", Locale.ENGLISH);
        ZonedDateTime zdt = ZonedDateTime.parse(stdDateTime, parser);
        System.out.println(zdt);
    }
}
    • 输出**:
2013-06-10T00:00+02:00[Europe/Paris]

如果出于某种原因,您需要java.util.Date的示例,可以按如下方式获取:

Date date = Date.from(zdt.toInstant());

ONLINE DEMO
从**Trail: Date Time**了解有关现代日期-时间API的更多信息。

相关问题