这是2月份还是3月份的日期? cal.set(2010,1,10)

时间:2010-10-31 10:01:01

标签: java date calendar

我已在我的应用中设置了这个日历:

Calendar cal = Calendar.getInstance();
cal.set(2010, 1, 10); 

我正在使用此SimpleDateFormat来表示月份:

SimpleDateFormat formatMonth = new SimpleDateFormat("MM");

在一个课程中,它出现为 February 10th, 2010

另一方面,它出现在 March 10th, 2010

哪个是正确的?

3 个答案:

答案 0 :(得分:7)

Calendar.set()month参数从零开始,因此1表示February。第一个行为是正确的。

我怀疑你的其他课程中的某些内容错误地尝试补偿基于零的月份索引,这会导致off-by-one错误。

答案 1 :(得分:3)

日历类有几个月的常量

 Calendar.JANUARY
例如,

。你应该使用那些。

答案 2 :(得分:1)

考虑到与JDK日期处理相关的所有麻烦,您应该真正关注use Joda time instead。上面的代码将被重写为

DateTime dt = new DateTime().withDate(2010,2,10).withTime(12,13,14,0);

并代表2010年2月10日12:13:14.000(UTC)。没有歧义,线程安全且不可变。

您应该注意SimpleDateFormat不是线程安全的。