我要根据每个国家的日期格式显示日期。 我曾尝试过很多办法终于让我找到这个例子
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这个预期不会有“沃尔姆。”
任何人都可以解释这种现象?
这是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
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
该Date
和DateFormat
要链接到java2s页面上使用的类是早已过时的,尤其是出了名的也麻烦了后者。 仅仅出于这个原因,我建议你停止使用,并开始使用java.time
,现代Java的日期和时间API,来代替。 它是如此的好得多的工作。
你能做到在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.time
。 - Java规范请求(JSR)310 ,在那里
java.time
首次描述。 - ThreeTen反向移植项目 ,的反向移植
java.time
到Java 6和7(对于ThreeTen JSR-310)。 - ThreeTenABP ,ThreeTen反向移植安卓版
- 问:如何在Android的项目中使用ThreeTenABP ,有一个非常详尽的解释。
最后,我找到了答案.. :)感谢奥莱VV
那就是: Java的DateFormat.SHORT在Android中无法按预期工作