日期格式解析异常 - “EEE MMM dd HH:mm:ss Z yyyy”

2022-09-02 20:07:50

我遇到了日期解析示例日期的问题:

SimpleDateFormat parserSDF=new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy", Locale.getDefault());


parserSDF.parse("Wed Oct 16 00:00:00 CEST 2013");

有异常

我想把这个格式的日期解析为yy-MM-dd,我试试:

SimpleDateFormat parserSDF = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
Date date = parserSDF.parse("Wed Oct 16 00:00:00 CEST 2013");

take : java.text.ParseException: Unparseable date: “Wed Oct 16 00:00:00 CEST 2013”


好的,我改成和工作:

SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy", Locale.ENGLISH);
Date date = parserSDF.parse("Wed Oct 16 00:00:00 CEST 2013");

答案 1

我假设对你来说,因为你似乎在波兰。Locale.getDefault()pl-PL

因此,日期字符串中的英语单词会导致无法解析的日期。

一个合适的波兰日期是这样的String

"Wt paź 16 00:00:00 -0500 2013"

否则,请将 您 更改为,以便对象可以使用英语单词解析日期。LocaleLocale.ENGLISHSimpleDateFormatString


答案 2

而不是使用你和其他人经常不知道哪个默认值,你可以通过使用来决定,因为我看到你的字符串日期是英文格式。如果您在其他国家/地区,格式将有所不同。Locale.defaultlocale.ENGLISH

以下是我的示例代码:

public static void main(String[] args) {
    try {
        SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.ENGLISH);
        Date date = parserSDF.parse("Wed Oct 16 00:00:00 CEST 2013");
        System.out.println("date: " + date.toString());
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
}

结果将是 : 。或者,您可以使用其字段来决定要打印此日期的哪个部分。date: Wed Oct 16 05:00:00 ICT 2013

希望这有帮助:)