为什么Java日历集(整数年、整数月、整数日期)没有返回正确的日期?

为什么Java日历集(整数年、整数月、整数日期)没有返回正确的日期?,java,calendar,Java,Calendar,根据doc,日历集()为: 代码: Calendar c1 = GregorianCalendar.getInstance(); c1.set(2000, 1, 30); //January 30th 2000 Date sDate = c1.getTime(); System.out.println(sDate); 输出: Wed Mar 01 19:32:21 JST 2000 为什么不是1月30日?日历对象中的月份从0开始 0 = January = Calendar.JANUA

根据doc,日历集()为:

代码:

Calendar c1 = GregorianCalendar.getInstance();
c1.set(2000, 1, 30);  //January 30th 2000
Date sDate = c1.getTime();

System.out.println(sDate);
输出:

Wed Mar 01 19:32:21 JST 2000

为什么不是1月30日?日历对象中的月份从0开始

0 = January = Calendar.JANUARY
1 = february = Calendar.FEBRUARY

一月份是二月。2月30日改为3月1日。 您应该为月份设置0。最好使用日历中定义的常量:

c1.set(2000, Calendar.JANUARY, 30);

示例中选择的日期很有趣。示例代码块是:

Calendar c1 = GregorianCalendar.getInstance();
c1.set(2000, 1, 30);  //January 30th 2000
Date sDate = c1.getTime();

System.out.println(sDate);
并输出
Wed Mar 01 19:32:21 JST 2000

当我第一次阅读示例时,我认为输出是错误的,但它是正确的:)

  • 日历。月从0开始,因此1表示二月
  • 2月的最后一天是28日,所以产量应该是3月2日
  • 但选定的年份很重要,它是2000年,也就是2月29日,所以结果应该是3月1日
对任何使用
java.util.Date
java.util.Calendar
的人的标准建议:使用Joda时间,在月份可用,从0开始计算,而不是从1开始计算。是的,我知道-这很烦人。从现在起,我将开始在所有可能的项目中使用jode,日期和日历的不一致性和奇怪性太高了!总是关掉@nimchinpsky,Java不再那么蹩脚了。从Java8开始,我们就有了(也向后移植到Java6和Java7)。谢谢!希望java文档能坚持这么重要的一点!(或者我错过了…?)@masato san:你错过了,。伙计,你救了我一天
Calendar c1 = GregorianCalendar.getInstance();
c1.set(2000, 1, 30);  //January 30th 2000
Date sDate = c1.getTime();

System.out.println(sDate);