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

时间:2015-05-22 11:00:45

标签: java

为什么会这样?对于月份和日期,我认为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)

3 个答案:

答案 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。