android - 尊重当前语言环境的自定义 Android 日期格式

标签 android localization

有没有办法指定 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 年 Říj”。这可以通过以下方式实现:

DateFormat dayMonth = new SimpleDateFormat("MMM yyyy");

但我不想在我的应用中硬编码这种格式。我只看到一种方法:将它放入 strings.xml 中,翻译人员将不得不对其进行设置。或者有更好的方法吗?

最佳答案

Android 有 DateFormat.getBestDateTimePattern()实现这一目标

pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), "MMMyyyy");
dayMonth = new SimpleDateFormat(pattern);

唯一的缺点是 API 级别为 18。我个人使用 DateFormat.getMediumDateFormat() 的结果作为后备。或者,您可以忽略旧设备的语言环境并使用 new SimpleDateFormat("MMM yyyy") 作为后备或尝试向后移植这一方法。

OP 编辑​​

我在 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()));
}

下面是一些结果:

  • 北美:2016 年 7 月
  • AE: يوليو٢٠١٦
  • BG:07.2016 年。
  • 捷克:2016 年 cervenec
  • 法国:古埃 2016
  • DE:2016 年 7 月
  • 英国:2016 年 7 月
  • FI:heinä 2016
  • IT:吕 2016
  • 人力资源:2016 年 SRP。
  • 俄罗斯:2016 年 июль

关于android - 尊重当前语言环境的自定义 Android 日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38545812/

相关文章:

android - 无法解决android studio中的所有依赖项

Android本地化问题: Not all items in the layout update properly when switching locales

ios - Xcode 10 - 如何刷新 Siri 快捷方式意图定义文件的本地化?

ruby-on-rails - 设置本地化文件中文本的样式 - 粗体、斜体等

c# - 我可以更改 Windows Azure 网站上的区域设置吗?

android - Android Studio 4.1 中的 navigation.json 是什么?

java - 在 Android 中调用随机方法

java - Android JSON 解析英镑符号会出现什么?

java - 将数据/对象附加到选项卡式布局中的选项卡

localization - 在运行时在 Windows 应用商店应用程序中切换语言