为什么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日。