为什么会这样?对于月份和日期,我认为Java假设前一个有效的月份和日期,但我不明白为什么年份是2。
Sun Nov 30 00:00:00 GMT 2
输出是:
Failed to build gem native extension.
....
libv8 requires python 2 to be installed in order to build, but it is currently not available (RuntimeError)
答案 0 :(得分:16)
公历没有第0年。
0年级对应于1BCE(在Common Era之前,也称为BC)。
因为您提供月份0和当天0,它会回滚到上个月和上一年。
即。公元前30年11月30日。
Date#toString
不包含BCE / CE后缀。在绝大多数情况下,这将是多余的。
如果您打算使用远在那时的日期,那么您需要咨询历史学家。
答案 1 :(得分:5)
默认情况下SimpleDateFormat
尝试解析甚至错误的输入。您可以使用setLenient
方法关闭此功能:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
sdf.setLenient(false);
Date result = sdf.parse("0000/00/00");
这样你就会有一个例外情况,在你的情况下可能更合适:
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)
答案 2 :(得分:4)
日期的起点是00010101
ei年 - 1,月 - 1月和日期 - 1
您输入的内容为00000000
以月开头 - 00表示Jan - 1
即12月
日00
表示1 Dec - 1
,即30th Nov
这解释了输出的第一部分。 Sun Nov 30 00:00:00 GMT
年份为00
,表示第1年减1。即公元前1
随着时间的推移,一年又一次回归,并在公元前2年开始。
因此,年份显示为2。