18

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

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


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

有异常

确切地说,我想将此格式日期解析为 yyyy-MM-dd 我尝试:

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

采取:java.text.ParseException:无法解析的日期:“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");
4

3 回答 3

23

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

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

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

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

否则,将您的更改Locale为,Locale.ENGLISH以便对象可以用英文单词SimpleDateFormat解析日期。String

于 2013-11-08T14:51:59.237 回答
9

而不是使用Locale.default你和其他人通常不知道哪个默认值,你可以决定使用locale.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。或者,您可以通过使用其字段来决定要打印此日期的哪一部分。

希望这有帮助:)

于 2013-11-08T14:43:37.090 回答
6

我认为原始异常是由于Z您的格式造成的。根据文档

Z   Time zone   RFC 822 time zone   -0800

您很可能打算使用小写字母z

于 2013-11-08T14:49:09.333 回答