ParseException:无法解析的日期:"Wed, 22 Apr 2015 05:45:42 GMT"

ParseException: Unparseable date: "Wed, 22 Apr 2015 05:45:42 GMT"

我正在尝试将 "Wed, 22 Apr 2015 05:45:42 GMT" 转换为 "yyyy MM dd - HH:mm"

但是那个字符串不适合所有这些简单的日期格式,它在所有三个中都给出了异常

new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss");
new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss 'Z'");

在日期格式中使用小 z

new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");

new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'z'");

我已经用下面的代码检查了它,它正在工作。

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
    try {
        Date date =simpleDateFormat.parse("Wed, 22 Apr 2015 05:45:42 GMT");
        Log.e(MainActivity.class.getSimpleName(),"date : "+date.toString());
    } catch (ParseException e) {
        e.printStackTrace();
    }

我可以重现你的问题,因为我也坐在非英语国家。解决方案是将英语指定为语言,因为您的输入包含英语 word/abbreviation(查看星期几 "Wed"!)。以下解决方案有效:

SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH);
Date d = sdf.parse("Wed, 22 Apr 2015 05:45:42 GMT");
SimpleDateFormat out = new SimpleDateFormat("yyyy MM dd - HH:mm", Locale.ROOT);
System.out.println(out.format(d)); // output in the system timezone

您的应用程序的用途(全球与否)无关紧要。 唯一重要的是文本输入的语言。如果语言有所不同,那么您必须首先确定相关设备的语言(可能 Locale.getDefault()) 并将其设置在您的 SimpleDateFormat-object.