【发布时间】:2021-12-31 15:47:30
【问题描述】:
以下代码:
Locale locale = new java.util.Locale("en", "AU");
DateTimeFormatter fmt = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(locale);
ZonedDateTime zdt = ZonedDateTime.parse("2021-11-19T14:13:12Z");
return fmt.format(zdt);
根据操作系统给我不同的结果:
| OS | Format | Java |
|---|---|---|
| Windows | 19 Nov. 2021, 2:13:12 pm | 1.8.0_312 |
| macOS | 19 Nov 2021, 2:13:12 pm | 1.8.0_312 |
| Linux/Ubuntu | 19/11/2021, 2:13:12 PM | 1.8.0_292 |
这是预期的吗?我的单元测试在不同的上下文中都失败了,这对我来说似乎很意外
【问题讨论】:
-
我看不到测试在哪里实际使用了创建的
Locale locale = new java.util.Locale("en", "AU");。你的意思是写...withLocale(locale);而不是.withLocale(context.getLocale());? -
FormatStyle.SHORT 也不同:windows & OSX
19/11/21, 2:13 pm,Linux 19/11/21 2:13 PM -
哦,是的,忘记简化了,谢谢 - 更新
-
所以... Mac 和 Windows 产生相同的结果,并且使用来自具有相同语言环境的 samve 供应商的相同版本。 Linux 不是。您能否尝试设置区域设置并将安装设置为与 linux 机器相同的版本和相同的供应商?
-
问题:我们(您和我们)如何确保您显示的代码实际上代表了正在运行的代码?您在转录时已经犯了至少 2 个错误 - 一次是为了省略输出的时间部分,一次是因为您没有使用 Locale 实例。我们如何确定您的真实测试没有运行与您在此处显示的不同的东西?您似乎很可能在没有意识到的情况下在每台机器上使用了不同的语言环境。
标签: java time formatting datetimeformatter