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

Nat*_*tim 6 java formatting date

我正在使用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());
}
Run Code Online (Sandbox Code Playgroud)

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

这不可能吗?为什么?

谢谢

Dan*_*ann 19

Java API:

public int getMonth()

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


Jes*_*per 5

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

需要注意的是类Calendar具有常数来表示月:Calendar.JANUARYCalendar.FEBRUARY等使用的,而不是原始数据。

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

  • 我相信 Java 从 POSIX 继承了那个设计错误。最初旨在允许将月份值用作月份名称数组的索引。 (3认同)