gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 13:12:25 26 4
gpt4 key购买 nike

有没有办法指定 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com