我想根据每个国家/地区的日期格式显示日期。我终于尝试了很多方法,我找到了这个例子
http://www.java2s.com/Code/Java/Data-Type/DateFormatwithLocale.htm
这给出了我的意思的完美输出。某些国家/地区德国不会使用 12hr 格式,而是使用 24小时格式与无AM / PM 。虽然像 US 这样的国家使用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.
对于Locale:en_US它是预期的但是在Locale的情况下:de_DE预计不会有“vorm”。
有人可以解释这种行为吗?
答案 0 :(得分:0)
这是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)
答案 1 :(得分:0)
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上测试过,但我相信结果会一样。
您链接到的java2s页面上使用的Date
和DateFormat
类已经过时,特别是后者也非常麻烦。仅仅因为这个原因,我建议你停止使用它们,然后开始使用现代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.time
。java.time
。java.time
向Java 6和7的后端(JST-310的ThreeTen)。答案 2 :(得分:0)
最后我找到了答案.. :)感谢Ole V.V.