今天,在新构建机器上的某些测试失败了,而在其他机器上的测试没问题。照看问题表明
@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)
(OS 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)
出什么问题了?有什么我可以检查的吗?
答案 0 :(得分:2)
您很可能不希望使用“ YYYY-MM-dd”格式,而是希望使用“ yyyy-MM-dd”格式。
“ Y”是基于周的年份,这取决于语言环境。在某些语言环境中,2000年1月2日可能属于以周为基础的1999年,在其他语言环境中,2000年1月2日可能属于以周为基础的2000年。
“ y”是年份,通常用作日历年。
答案 1 :(得分:1)
当我仅打印结果的toString()
方法时,很明显传递给DateTimeFormatter
的格式就是问题所在
public static void main(String[] args) {
String result = LocalDate.of(2000,1,2)
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println(result.toString());
String wrongResult = LocalDate.of(2000,1,2)
.format(DateTimeFormatter.ofPattern("YYYY-MM-dd"));
System.out.println(wrongResult.toString());
}
此打印
2000-01-02
1999-01-02
因此,较旧的Java版本可能无法识别出差异,而较新的Java版本可以识别。有关解释,请查看@ThomasKläger的答案。