无法将字符串日期转换为日期 - 无法解析日期错误

时间:2016-03-17 20:03:19

标签: android simpledateformat android-date

我有以下格式的日期字符串 - 例如:

Thu, 17 Mar 2016 19:30:25 +0000
Sun, 06 Mar 2016 12:43:13 +0000

我想将此日期转换为更易读的格式:

Thu, 17 Mar 2016
Sun, 06 Mar 2016


public static String getMoreReadableDateFormat(String dateStringToConvert) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z");
    Date convertedDate;
    try {
        convertedDate = dateFormat.parse(dateStringToConvert);
    } catch (ParseException e) {
        // could not convert date, return the initial form
        return dateStringToConvert;
    }
    String formattedDate = new SimpleDateFormat("E, dd MMM yyyy").format(convertedDate);
    return formattedDate;
}

奇怪的是,这段代码对我来说很好(我得到了简化的日期版本),但是对于其他国家的一些其他人来说不起作用,并且无法将日期字符串转换为简化版本。我知道它必须与Locale相关,但不知道如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

您可以尝试将手机的日期格式设置为法语或其他内容,以重现您提到的行为。

您确定dateStringToConvert参数始终格式正确吗?

我建议你将第一行更改为:

SimpleDateFormat dateFormat = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z", Locale.ENGLISH);

答案 1 :(得分:0)

请注意以下链接中列出的DateFormats(如日期,时间和日期和时间)之间的区别非常重要。鉴于您的代码块,看起来您希望传入日期和时间字符串,并且您希望仅返回日期。我猜测它没有遵循您声明的格式

new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z")

此外,它看起来不像该字符串匹配预定义格式。您可以尝试重新格式化以使用

DateFormat dateAndTimeFormatter = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, currentLocale);

这会接受像

这样的字符串
"Tuesday, June 30, 2009 7:03:47 AM PDT"

使用上面的格式化程序解析参数,然后转换另一个dateFormatter

DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.DEFAULT, currentLocale);

您可以从

获取默认本地
Locale.getDefault()

所以你的代码看起来像这样

public static String convertDate(String dateStringToConvert) throws ParseException {
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, Locale.getDefault());
        Date convertedDate = dateFormat.parse(dateStringToConvert);
        return DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.getDefault()).format(convertedDate);
    }

在此处查看有关使用预定义格式的更多信息。 https://docs.oracle.com/javase/tutorial/i18n/format/dateFormat.html