有没有办法如何指定dateFormat元素并尊重当前的语言环境规则?我知道我可以使用SimpleDateFormat
并指定我喜欢的格式 - 但在不同的国家/地区可能会出错。
我试图屏蔽DateFormat
中的元素,但它只接受SHORT,MEDIUM和LONG:
DateFormat dayMonth = DateFormat.getDateInstance(DateFormat.DAY_OF_WEEK_IN_MONTH_FIELD | DateFormat.MONTH_FIELD);
Caused by: java.lang.IllegalArgumentException: Illegal date style: 11
at java.text.DateFormat.checkDateStyle(DateFormat.java:843)
at java.text.DateFormat.getDateInstance(DateFormat.java:378)
我想要“2016年10月”,或“2016年”。这可以通过以下方式实现:
DateFormat dayMonth = new SimpleDateFormat("MMM yyyy");
但我不想在我的应用中硬编码这种格式。我只看到一种方法:把它放到strings.xml中,翻译器必须设置它。或者有更好的方法吗?
答案 0 :(得分:2)
Android有DateFormat.getBestDateTimePattern()
来实现此目标
pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), "MMMyyyy");
dayMonth = new SimpleDateFormat(pattern);
唯一的缺点是API级别为18.我个人使用DateFormat.getMediumDateFormat()
的结果作为后备。或者,您可以忽略旧设备的区域设置,并使用new SimpleDateFormat("MMM yyyy")
作为后备或尝试向后移植此方法。
OP编辑
我尝试使用Android 6的Nexus 5x以下代码
for (Locale locale : locales) {
format = android.text.format.DateFormat.getBestDateTimePattern(locale, "MMMyyyy");
DateFormat dateFormat = new SimpleDateFormat(format, locale);
log.debug("{}: {}", locale.getCountry(), dateFormat.format(new Date()));
}
以下是一些结果: