【发布时间】:2019-03-29 18:41:59
【问题描述】:
今天在新构建机器上的一些测试失败了,在其他机器上还可以。处理问题表明
@Test
public void testDateTimeFormater()
{
String result = LocalDate.of(2000,1,2)
.format(DateTimeFormatter.ofPattern("YYYY-MM-dd"));
Assert.assertTrue(result,result.equals("2000-01-02"));
}
导致“java.lang.AssertionError: 1999-01-02”
jave 版本不工作是
root@build02:~# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
(操作系统 Debian 9,Ubuntu 18.04)
在开发者机器上工作的 java 版本在哪里
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
(操作系统 Ubuntu 14.04)
有什么问题?有什么可以查的吗?
【问题讨论】:
-
您最好
Assert.assertEquals("2000-01-02",result);以获得更多的故障信息。 -
你试过
"yyyy-MM-dd"的格式吗?也许大写"Y"是问题...我尝试打印它并且没有大写"Y"它可以工作。 -
yyyy 工作正常,但问题是为什么 'YYYY' 在旧版本中工作?
-
对于您想要的结果,您不需要格式化程序。只需使用
LocalDate.of(2000,1,2).toString()。 -
除了错误的大小写(
Y而不是y)之外,还有一个地区差异会在你身上耍花招。出现错误的 JVM 具有使用 ISO 8601 周的默认语言环境。在 ISO 8601 中,2000 年 1 月 1 日星期日属于 1999 年的最后一周,因此您得到 1999 年。它似乎工作的 JVM 使用美国(或类似)区域设置和星期方案。在美国,那一天属于新的一周年(我什至相信它属于 2000 年的第 2 周)。对于其他日期,只要您使用YYYY,您也会在这台计算机上得到不正确的结果。
标签: java datetime-format localdate