无法解析的日期:'Day name in week' (SimpleDateFormat)

Unparseable Date: 'Day name in week' (SimpleDateFormat)

我正在尝试将日期从 String 转换为 Date 对象:

String dateString = "Mon, 04 Sep 2017 18:30:28";
String dateFormat = "EEE, dd MMM yyyy HH:mm:ss";

导致以下异常:

java.text.ParseException: Unparseable date: "Mon, 04 Sep 2017 18:30:28"

我尝试了不同的字符串和格式,问题似乎是星期的名称 ('EEE')。没有它就完美无缺。

这也很完美:

String dateString = "04 Sep 2017 18:30:28, Mon";
String dateFormat = "dd MMM yyyy HH:mm:ss, EEE";

月份和工作日是缩写文本。文本依赖于语言,如果您在实例化 SimpleDateFormatter 时没有提供特定的 Locale,则会使用系统的 Locale。您的工作日而不是月份解析失败的原因可能是系统默认语言中月份的缩写名称恰好与英语相同。

下面是一些代码,您应该如何用文本解析日期:

SimpleDateFormat formatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss", Locale.ENGLISH);
formatter.setLenient(false);
ParsePosition pos = new ParsePosition(0);
return formatter.parse(toParse, pos);

其中 toParse 是一个包含您的日期的字符串。

您没有添加区域设置,这一定会在解析星期几和月份的文本时导致解析异常

    public static void main(String[] args) throws ParseException {
        String dateString = "Mon, 04 Sep 2017 18:30:28";
        SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss", Locale.ENGLISH);
        System.out.println(dateFormat.parse(dateString));
    }

产生以下输出

Mon Sep 04 18:30:28 IST 2017