java - 带有区域设置的日期格式

标签 java android date locale datetime-format

我想根据每个国家/地区的日期格式显示日期。我尝试了很多方法终于找到了这个例子

http://www.java2s.com/Code/Java/Data-Type/DateFormatwithLocale.htm

这给出了我的意思的完美输出。德国等一些国家/地区不会使用12 小时格式,而是使用24 小时格式,并且没有 AM/PM。而一些国家(例如美国)则使用 12 小时制。

但是我发现,在运行这个 java 类时,它会按预期返回正确的输出,但是在 Android 项目中运行它时,它会返回类似这样的内容

I/System.out: Locale: en_US
I/System.out: Jan 23, 2018 5:26:41 AM
I/System.out: Jan 23, 2018 5:26:41 AM
I/System.out: Jan 23, 2018 5:26:41 AM
I/System.out: Jan 23, 2018 5:26:41 AM
I/System.out: Jan 23, 2018 5:26:41 AM
I/System.out: Locale: de_DE
I/System.out: 23.01.2018 5:26:41 vorm.
I/System.out: 23.01.2018 5:26:41 vorm.
I/System.out: 23.01.2018 5:26:41 vorm.
I/System.out: 23.01.2018 5:26:41 vorm.
I/System.out: 23.01.2018 5:26:41 vorm.

如果是区域设置:en_US,则符合预期,但如果是区域设置:de_DE,则预计不会有该“vorm”。

谁能解释一下这种行为吗?

最佳答案

    LocalDateTime dateTime = LocalDateTime.of(2018, 1, 23, 5, 26, 41);
    DateTimeFormatter formatter = DateTimeFormatter
            .ofLocalizedDateTime(FormatStyle.MEDIUM)
            .withLocale(Locale.GERMAN);
    System.out.println(dateTime.format(formatter));

打印

23.01.2018, 05:26:41

虽然没有在 Android 上进行测试,但我相信结果是一样的。

java.time

您链接到的 java2s 页面上使用的 DateDateFormat 类早已过时,尤其是后者也非常麻烦。仅出于这个原因,我建议您停止使用它们并开始使用现代 Java 日期和时间 API java.time。与它一起工作真是太好了。

你能在 Android 上做到这一点吗?你当然可以。我听说 java.time 内置在较新的 Android 设备上。对于较旧的设备,请将 ThreeTenABP 添加到您的项目(请参阅底部的链接),并确保导入 org. Threeten.bp.LocalDateTime 、 org. Threeten.bp.format.DateTimeFormatter 和 org. Threeten.bp.format.FormatStyle 。然后一切都会正常。

出了什么问题?

Java 从不同的来源获取其语言环境信息。它在桌面 Java 和 Android Java 之间有所不同,甚至可能在 Android 设备之间有所不同,并且在 Java 版本之间也有所不同。在没有任何保证的情况下,我认为 java.time 在这方面比旧类更稳定。

链接

关于java - 带有区域设置的日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48398572/

相关文章:

sql - 如何在Oracle中选择特定日期

javascript - 日期和时间的时间戳 javascript

java - Tapestry/JDBC - 存储日期

java - 什么是本地对等体?

java - 检查 ArrayList 对象的实例

android - 我的 onReceive 响应哪个请求?

java - 在 jlabel 背景上添加 jpanel

android - 如何像 Theme.AppCompat.Light.DarkActionBar 一样设置 appcompat-v7 工具栏的样式?

java - 删除带有 fragment 的底部导航 View

java - 安卓Java : Difference between current time and specific time in future is calculated wrong