为什么Java日历设置(INT年,INT月,INTdate)没有返回正确的date?

根据doc,日历设置()是:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html#set%28int,%20int,%20int%29

set(int year, int month, int date) Sets the values for the calendar fields YEAR, MONTH, and DAY_OF_MONTH. 

码:

 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日?

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

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

日历对象中的月份从0开始

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

这个例子的选定date很有趣。 示例代码块是:

 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

当我第一次看到这个例子,我认为输出是错误的,但是这是真的:)。 Calendar.Month从0开始,1表示2月。 而且你知道去年2月份是28,所以产量应该是3月2日。 但是选定的年份是重要的,这意味着2月29日是2000年,因此结果应该是3月1日。