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

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");

ParseException I guess - Shoaib Chikate
我运行了你的代码,没有异常。请附上异常堆栈跟踪。 - jdev
2
请注意,像java.util.Datejava.util.Calendarjava.text.SimpleDateFormat这样的旧日期时间类现在已经成为遗留系统,被内置于Java 8及更高版本中的java.time类所取代。请参阅Oracle的教程 - Basil Bourque
3个回答

24

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

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

一个适当的波兰日期String应该像这样:

TBD

"Wt paź 16 00:00:00 -0500 2013"
否则,将您的Locale更改为Locale.ENGLISH,以便SimpleDateFormat对象可以解析带有英语单词的String日期。

10

不要使用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();
    }
}

结果将是:日期:2013年10月16日 星期三 05:00:00 ICT 。您也可以通过使用其字段来决定要打印日期的哪个部分。希望这可以帮到您 :)

6

我认为你的格式中的Z导致了原始的异常。根据文档

Z   Time zone   RFC 822 time zone   -0800

最有可能你是想使用小写字母z

文档链接已损坏。 - Rao
@Rao - 已修复链接 :) - Алексей
感谢您的关注和快速行动来修复它。非常感激。 - Rao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接