如何使用 Android 设备区域设置设置日期/时间的格式?

How do I format date/time using Android device locale?

提问人:chrylis -cautiouslyoptimistic- 提问时间:11/14/2023 更新时间:11/14/2023 访问量:31

问:

我在 Android 中使用该包,我想根据用户的设备设置格式化。我尝试了我的默认格式,但无论设备的设置如何,它们始终使用固定格式(例如,即使手机设置为 12 小时,也始终使用 24 小时格式)。java.timeZonedDateTimeDateTimeFormatter.ofLocalizedDateTime/ofLocalizedTime

如何获得尊重用户设备首选项的设备?java.time.format.DateTimeFormatter

关于在 Android 上格式化本地化日期的 SO 上有很多问题,但所有答案要么参考旧版 API,要么忽略设备的设置。Date

android java-time

评论

0赞 Reilas 11/14/2023
Reference, StackOverflow – Android 获取当前区域设置,而不是默认值

答:

1赞 Basil Bourque 11/14/2023 #1

如您所见,它不遵循用户自己的本地化详细信息设置,例如 12/24 小时制。DateTimeFormatter.ofLocalized…

CLDR的

相反,该类利用一组特定的本地化规则。

在较旧的 Java 中,捆绑了一组有限的本地化规则。相比之下,现代 Java 捆绑了 Unicode 联盟发布的详细本地化规则,即通用语言环境数据存储库 (CLDR)。起初,CLDR 在 Java 中是次要用途。在 Java9+ 中,CLDR 是本地化规则的缺省源

我不知道 Android 使用什么作为其本地化规则的来源。

影响输出

我可以理解想要更改本地化输出。例如,许多本地化格式使用两位数的年份,我发现这在业务中引起了各种混乱。我想覆盖本地化格式化的一个方面,始终使用四位数的年份。

影响本地化输出的一种方法是指定子区域性。CLDR 定义了其中的许多内容。

也许你可以从 .然后用于覆盖方面。这仅仅是猜测;我没有尝试过。DateTimeFormatterDateTimeFormatter.ofLocalized…DateTimeFormatterBuilder

评论

0赞 chrylis -cautiouslyoptimistic- 11/14/2023
谢谢。Android 显然在命名空间中提供了一种方法来获取 ;当这成为一个足够大的问题时,我会看看我是否可以翻译它。android.SimpleDateFormatter