Java LocalDate格式2000-1-2错误
Java LocalDate Formatting of 2000-1-2 error
今天在一台新机器上的一些测试失败了,而在其他机器上却没问题。查看问题后显示
@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)
(OS Ubuntu 14.04)
有什么问题吗?有什么我可以检查的吗?
您很可能不想要 "YYYY-MM-dd" 格式,而是 "yyyy-MM-dd".
"Y" 是基于周的年份,它取决于语言环境。 2000 年 1 月 2 日在某些区域可能属于基于周的 1999 年,而在某些其他区域可能属于基于周的 2000 年。
"y" 是纪年,也就是通常用作日历年的年份。
当我只打印结果的 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 版本无法识别差异,但较新的版本可以。有关解释,请查看@ThomasKläger 的回答。
今天在一台新机器上的一些测试失败了,而在其他机器上却没问题。查看问题后显示
@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)
(OS Ubuntu 14.04)
有什么问题吗?有什么我可以检查的吗?
您很可能不想要 "YYYY-MM-dd" 格式,而是 "yyyy-MM-dd".
"Y" 是基于周的年份,它取决于语言环境。 2000 年 1 月 2 日在某些区域可能属于基于周的 1999 年,而在某些其他区域可能属于基于周的 2000 年。
"y" 是纪年,也就是通常用作日历年的年份。
当我只打印结果的 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 版本无法识别差异,但较新的版本可以。有关解释,请查看@ThomasKläger 的回答。