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)中。
添加回答
举报