日期格式与语言环境(Date Format with Locale)

2019-09-29 23:50发布

我要根据每个国家的日期格式显示日期。 我曾尝试过很多办法终于让我找到这个例子

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这个预期不会有“沃尔姆。”

任何人都可以解释这种现象?

Answer 1:

这是Java JDK本土的行为。

取决于你通过有效的语言环境,JDK提供格式化的日期时间。

返回一个新DateFormat哪些格式日期指定语言环境的给定格式化风格的实例。

Parameters:
style the given formatting style. Either one of DateFormat.SHORT, 
DateFormat.MEDIUM, DateFormat.LONG, or DateFormat.FULL.
locale the desired locale.
Returns: a date formatter.
Throws: java.lang.IllegalArgumentException if style is invalid, or if locale isn't 
one of the locales returned from getAvailableLocales().
java.lang.NullPointerException if locale is null
See also: java.text.DateFormat.getDateInstance(int,java.util.Locale)

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/java/text/spi/DateFormatProvider.java#DateFormatProvider.getTimeInstance%28int%2Cjava.util.Locale% 29



Answer 2:

    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

DateDateFormat要链接到java2s页面上使用的类是早已过时的,尤其是出了名的也麻烦了后者。 仅仅出于这个原因,我建议你停止使用,并开始使用java.time ,现代Java的日期和时间API,来代替。 它是如此的好得多的工作。

你能做到在Android? 你当然可以。 据我所知, java.time是建立在较新的Android设备。 对于较旧的设备,添加ThreeTenABP到您的项目(见底部的链接),并确保进口org.threeten.bp.LocalDateTimeorg.threeten.bp.format.DateTimeFormatterorg.threeten.bp.format.FormatStyle 。 然后,它会所有的工作。

什么地方出了错?

Java的拿起不同来源的环境信息。 它桌面Java和Android Java之间的变化,它甚至可能Android设备之间的变化,它的Java版本之间变化。 不作任何保证,我认为java.time在这方面更稳定的比旧的类人。

链接

  • 甲骨文教程:日期时间 ,讲解如何使用java.time
  • Java规范请求(JSR)310 ,在那里java.time首次描述。
  • ThreeTen反向移植项目 ,的反向移植java.time到Java 6和7(对于ThreeTen JSR-310)。
  • ThreeTenABP ,ThreeTen反向移植安卓版
  • 问:如何在Android的项目中使用ThreeTenABP ,有一个非常详尽的解释。


Answer 3:

最后,我找到了答案.. :)感谢奥莱VV

那就是: Java的DateFormat.SHORT在Android中无法按预期工作



文章来源: Date Format with Locale