2010-06-07 38 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開始就像數組索引

相關問題