Leo*_*rak 4 android localization
有没有办法指定 dateFormat 元素并遵守当前的语言环境规则?我知道我可以使用SimpleDateFormat和指定我喜欢的格式 - 但在不同的国家可能是错误的。
我试图掩盖其中的元素,DateFormat但它只接受短、中和长:
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)
Run Code Online (Sandbox Code Playgroud)
我想得到“Oct 2016”或“?íj 2016”。这可以通过以下方式实现:
DateFormat dayMonth = new SimpleDateFormat("MMM yyyy");
Run Code Online (Sandbox Code Playgroud)
但我不想在我的应用程序中硬编码这种格式。我只看到一种方法:将它放入 strings.xml 中,翻译人员必须对其进行设置。或者有更好的方法吗?
Android必须DateFormat.getBestDateTimePattern()实现这一点
pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), "MMMyyyy");
dayMonth = new SimpleDateFormat(pattern);
Run Code Online (Sandbox Code Playgroud)
唯一的缺点是 API 级别为 18。我个人使用了DateFormat.getMediumDateFormat()作为回退的结果。或者,您可以忽略旧设备的语言环境并将其new SimpleDateFormat("MMM yyyy")用作后备或尝试向后移植这种方法。
操作编辑
我在 Nexus 5x 和 Android 6 上尝试了以下代码
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()));
}
Run Code Online (Sandbox Code Playgroud)
这是一些结果:
| 归档时间: |
|
| 查看次数: |
1938 次 |
| 最近记录: |