2010-06-07 41 views
6

我使用的SimpleDateFormat显示这样一个日程表:为什么用Java 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()); 
} 

外壳返回6和显示:mardi, 06/07/2010 12:44:52

它可以是不可能的?为什么?

谢谢

+0

变量date是从哪里来的?它只是一个初始化为当前时间和日期的类变量? – 2010-06-07 19:23:37

+0

当'Calendar date = Calendar.getInstance()'时'date.set()',我没有意识到那个月应该在0到11之间。 – Natim 2010-06-07 19:29:05

+0

问题是什么?你在2010年6月7日运行它,输出结果显示06/07/2010。那是对的。 – stackoverflowuser2010 2013-08-02 19:36:23

回答

19

Java API

公众诠释得到月()

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

+0

谢谢,但_为什么会有人认为这是一个好主意_? – 2017-05-24 17:36:51

1

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

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

0

这是你的区域设置为法国DD/MM/YY所以它是星期二,七月,2010年 第6月份是七月,如果它从0开始

4

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

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

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

+3

我相信Java继承了POSIX的设计错误。最初打算允许将月份值用作月份名称数组的索引。 – 2010-06-07 19:30:05

1

月份索引从0开始就像数组索引

相关问题