为什么Java日历集(整数年、整数月、整数日期)没有返回正确的日期?
根据doc,日历集()为: 代码:为什么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
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);