为了账号安全,请及时绑定邮箱和手机立即绑定

日历返回错误的月份

日历返回错误的月份

catspeake 2019-10-10 16:28:52
Calendar rightNow = Calendar.getInstance();String month = String.valueOf(rightNow.get(Calendar.MONTH));执行以上代码段后,month的值为10而不是11。
查看完整描述

3 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

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


查看完整回答
反对 回复 2019-10-10
?
幕布斯6054654

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

注意:输出可能会有所不同,这是特定于语言环境的。


查看完整回答
反对 回复 2019-10-10
?
白衣非少年

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)中。


查看完整回答
反对 回复 2019-10-10
  • 3 回答
  • 0 关注
  • 463 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信