Parse a Fri, 03 Nov 2017 09:12:46 java 显示无法解析

Parse a Fri, 03 Nov 2017 09:12:46 java which shows unparsable

2017 年 11 月 3 日,星期五 09:12:46 这是我的日期格式,我想在 java

中使用 SimpleDateFormat() 解析它

试试这个:

    DateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss", Locale.ENGLISH);
    Date date = df.parse("Fri, 03 Nov 2017 09:12:46");
    System.out.println(date);

我曾经有一个任务是编写一个功能,能够在事先不知道格式的情况下将日期字符串解析为日期。换句话说,如果一个字符串是有效日期,则它应该被识别为日期,并且无论它出现的格式如何都被解析为日期。所以我想出的解决方案是拥有一个包含我支持的所有日期格式的配置文件。我一一阅读并尝试解析具有该格式的字符串。如果它有效,那么我会停止,因为我得到了我的结果,如果没有,我会继续到最后。如果所有格式都失败,则字符串不是日期或格式不受支持。当然,添加(和删除)支持的格式不需要修改代码,因为它是我的配置文件。格式的顺序也很重要,因为这样我就可以控制我更喜欢美国格式而不是欧洲风格还是 vise-versa。我写了一篇文章更详细地描述了这个想法。这里是link:Java 8 java.time package: parsing any string to date。标题说它适用于 java 8,但总体思路也适用于早期版本。

tl;博士

LocalDateTime.parse( 
    "Fri, 03 Nov 2017 09:12:46" , 
    DateTimeFormatter.ofPattern( "EEE, dd MMM uuuu HH:mm:ss", Locale.US ) 
)

java.time

现代方法使用 java.time 类 取代麻烦的旧日期时间 类 与最早版本的 Java 捆绑在一起。避免 SimpleDateFormat 等。

您的输入缺少任何与 UTC 或时区的偏移指示符。所以我们解析为 LocalDateTime.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE, dd MMM uuuu HH:mm:ss", Locale.US ) ;
LocalDateTime ldt = LocalDateTime.parse( "Fri, 03 Nov 2017 09:12:46" , f ) ;