为什么会这样?对于月份和日期,我认为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后缀.在绝大多数情况下,这将是多余的.
如果您打算使用远在那里的日期,那么您需要咨询历史学家.
默认情况下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)