猿问

日历返回错误的月份

Calendar rightNow = Calendar.getInstance();

String month = String.valueOf(rightNow.get(Calendar.MONTH));

执行以上代码段后,month的值为10而不是11。


catspeake
浏览 464回答 3
3回答

侃侃无极

月份从0而不是1进行索引,因此10是11月,而11是12月。

幕布斯6054654

从许多答案可以清楚地看出:月份从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()));输出:11NovNovember注意:输出可能会有所不同,这是特定于语言环境的。

白衣非少年

正如几个人指出的那样,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)中。
随时随地看视频慕课网APP

相关分类

Java
我要回答