gpt4 book ai didi

java - 为什么 java.text.DateFormat 在 Android 上为 en_US 和 en_GB 返回相同的日期格式?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:11 26 4
gpt4 key购买 nike

我有一个小型 Android 应用程序,用于根据区域设置以不同格式打印特定日期。

这是我的代码(使用 java.text.DateFormat):

Locale[] locales = {new Locale("en", "US"), new Locale("en", "GB"), new Locale("en", "AU"), new Locale("en", "NZ"), new Locale("en", "ZA")};
for(int i = 0; i < locales.length; ++i) {
Log.d(logKey, locales[i].toString() + " - " + DateFormat.getDateInstance(DateFormat.SHORT, locales[i]).format(Calendar.getInstance().getTime()));
}

因此在 LogCat 中的输出是:

D/FormatPoC(  390): en_US - 4/27/12
D/FormatPoC( 390): en_GB - 4/27/12
D/FormatPoC( 390): en_AU - 4/27/12
D/FormatPoC( 390): en_NZ - 4/27/12
D/FormatPoC( 390): en_ZA - 4/27/12

所以我的问题是 - 为什么所有这些都一样?在 Java SE 中我得到:

en_US - 4/27/12
en_GB - 27/04/12
en_AU - 27/04/12
en_NZ - 27/04/12
en_ZA - 2012/04/27

这是我所期望的。我知道我可以使用 android.text.format.DateFormat 来根据用户当前的语言环境和日期顺序设置获得正确的结果,但这并不能解释为什么使用 java.text。 DateFormat 获取以编程方式指定的区域设置的格式不会返回正确的结果。

此外,不仅仅是 SHORT 日期格式 - MEDIUMLONG 也显示了 Android 和 Java SE 之间的不一致(即 Android 返回我指定的所有 5 个语言环境都采用相同的格式)。

我已经在 3 种不同的设备(2.3 和 4.0)和模拟器(2.3 和 4.0)上对其进行了测试,结果都相同。我还使用 Locale.USLocale.UK 进行了测试,只是为了看看它们是否有所不同,但结果是一样的。

有没有其他人遇到过这个,或者知道为什么会这样?

更新:2012-07-18

这似乎是模拟器以及美国制造的许多设备的问题。使用 Dalvik 资源管理器:

https://play.google.com/store/apps/details?id=org.jessies.dalvikexplorer&hl=en

我已经能够看到系统在不同设备(包括模拟器)上为 en_GB 返回的内容。一些返回适当的格式,一些返回 en_US 格式。我认为这只是每个设备的操作系统中内置了哪些格式资源的问题,尽管 模拟器 以及我的许多美国制造设备返回了错误的格式,我想知道是什么英国开发者认为,或者他们是否已经看到了这个问题。

最佳答案

这不是答案(我还没有足够的代表来添加评论...)

作为一名英国开发人员,我遇到过这个问题。我在我的 Galaxy S3 上看到了这个问题,正如您所描述的那样。

我不得不求助于允许用户选择日期格式作为首选项。不太好。

DalvikExplorer 程序也显示了问题:

enter image description here

关于java - 为什么 java.text.DateFormat 在 Android 上为 en_US 和 en_GB 返回相同的日期格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10355847/

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