Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getDate 0000/00/00返回奇怪值_Java - Fatal编程技术网

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

Java getDate 0000/00/00返回奇怪值,java,Java,为什么会发生这种情况?对于月和日,我认为Java假定上一个有效的月和日,但我不理解为什么年是2 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); Date result = sdf.parse("0000/00/00"); System.out.println(result.toString()); 输出为: Sun Nov 30 00:00:00 GMT 2 日期的起点为0000101 ei年份-1、月份-1和日期-1

为什么会发生这种情况?对于月和日,我认为Java假定上一个有效的月和日,但我不理解为什么年是2

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

System.out.println(result.toString());
输出为:

Sun Nov 30 00:00:00 GMT 2

日期的起点为
0000101
ei年份-1、月份-1和日期-1

您输入的是
00000000

将以月-00开始表示
1月-1日
ie 12月

日期
00
平均
12月1日-1日
ie
11月30日

这解释了输出的第一部分<代码>11月30日星期日00:00:00 GMT

给出的年份
00
表示年份1减去1。公元前1年 随着年份的倒转,这个月的另一个时间和日期是公元前2年


因此,年份显示为2。

公历没有0年

第0年对应1BCE(在普通纪元之前,也称为BC)

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

即公元前0002年11月30日

Date#toString
不包含BCE/CE后缀。在绝大多数情况下,这是多余的


如果要处理的日期要追溯到很久以前,则需要咨询历史学家。

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

这样,您将有一个例外,这可能更适合您的情况:

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)

不知道你想做什么…@AliGajani可能想问一个著名的问题“垃圾输入,垃圾输出”。@aioobe在java中更常见的是垃圾输入,例外输出。op只是看到了一些奇怪的东西,并试图理解是什么驱动了结果。@couling,API的设计日期留下了很大的改进空间。解释得很好。非常感谢。
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)