我有以下格式的日期字符串 - 例如:
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相关,但不知道如何解决这个问题。
答案 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