Java getDate 0000/00/00返回奇怪的值

Gon*_*oso 8 java

为什么会这样?对于月份和日期,我认为Java假设前一个有效的月份和日期,但我不明白为什么年份是2.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date result = sdf.parse("0000/00/00");

System.out.println(result.toString());
Run Code Online (Sandbox Code Playgroud)

输出是:

Sun Nov 30 00:00:00 GMT 2
Run Code Online (Sandbox Code Playgroud)

Bat*_*eba 16

公历没有0年.

0年级对应于1BCE(普通时代之前,也称为BC).

因为您为月份提供0而为当天提供0,所以它将回滚到上个月和上一年.

即公元前30年11月 - 2月.

Date#toString包括BCE/CE后缀.在绝大多数情况下,这将是多余的.

如果您打算使用远在那里的日期,那么您需要咨询历史学家.


Tag*_*eev 5

默认情况下SimpleDateFormat尝试解析甚至不正确的输入.您可以使用以下setLenient方法关闭此功能:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
sdf.setLenient(false);
Date result = sdf.parse("0000/00/00");
Run Code Online (Sandbox Code Playgroud)

这样你就会有一个例外,在你的情况下可能更合适:

Exception in thread "main" java.text.ParseException: Unparseable date: "0000/00/00"
    at java.text.DateFormat.parse(DateFormat.java:366)
    at Snippet.main(Snippet.java:11)
Run Code Online (Sandbox Code Playgroud)