为什么用Java SimpleDateFormat关闭一个月?

我正在使用SimpleDateFormat来显示这样的日历:

public String getDate() { String DATE_FORMAT = "EEEE, dd/MM/yyyy HH:mm:ss"; SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); System.err.println(date.getTime().getMonth()); return sdf.format(date.getTime()); } 

shell返回6并显示: mardi, 06/07/2010 12:44:52

这不可能吗? 为什么?

谢谢

从Java API :

public int getMonth()

返回一个数字,表示包含或以此Date对象表示的时间点开始的月份。 返回的值介于0和11之间,值0表示1月。

不幸的是,课程Date和课程Calendar中的月份是从零开始的。 (在我看来,这在这些类中是一个巨大的设计错误,它只是Java日期和时间API中的许多设计错误之一)。

请注意,类Calendar具有表示月份的常量: Calendar.JANUARYCalendar.FEBRUARY等。使用这些常量而不是原始数字。

经常提到的,更好的Java日期和时间API是Joda Time 。 请注意,有人建议将新的日期和时间API添加到基于Joda Time的下一版Java。

Date中的getMonth方法为0索引。 来自JavaDoc:

返回一个数字,表示包含或以此Date对象表示的时间点开始的月份。 返回的值介于0和11之间,值0表示1月。

月索引从0开始,就像数组索引一样

这是您的地区设置为法国DD / MM / YY所以它是2010年7月的星期二。如果从0开始,第6个月是7月。