3 回答

TA貢獻1876條經驗 獲得超7個贊
從許多答案可以清楚地看出:月份從0開始。
提示:您應該使用SimpleDateFormat來獲取月份的字符串表示形式:
Calendar rightNow = Calendar.getInstance();
java.text.SimpleDateFormat df1 = new java.text.SimpleDateFormat("MM");
java.text.SimpleDateFormat df2 = new java.text.SimpleDateFormat("MMM");
java.text.SimpleDateFormat df3 = new java.text.SimpleDateFormat("MMMM");
System.out.println(df1.format(rightNow.getTime()));
System.out.println(df2.format(rightNow.getTime()));
System.out.println(df3.format(rightNow.getTime()));
輸出:
11
Nov
November
注意:輸出可能會有所不同,這是特定于語言環境的。

TA貢獻1155條經驗 獲得超0個贊
正如幾個人指出的那樣,Java中Calendar和Date類返回的月份從0而不是1開始索引。因此0是1月,而本月11月是10。
您可能想知道為什么會這樣。起源在于與POSIX標準功能ctime,gmtime并且localtime,它接受或返回一個time_t與以下字段(從結構的人3的ctime):
int tm_mday; /* day of month (1 - 31) */
int tm_mon; /* month of year (0 - 11) */
int tm_year; /* year - 1900 */
該API幾乎完全復制到Java 1.0中的Java Date類中,并從那里完整地復制到Java 1.1中的Calendar類中。Sun推出了Calendar時,解決了最明顯的問題-公歷中2001年由Date類中的值101表示的事實。但是我不確定為什么他們沒有將日和月值更改為至少在索引上保持一致(從零或一)。直到今天,這種不一致和相關的混亂仍然存在于Java(和C)中。
添加回答
舉報