Java中Date类中月份值的增量

woo*_*d92 2 java date

所以,我正在输入一个非常简单的程序来接受用户的日期并将其打印回来.在我的第一次尝试中,我看到年份增加了1900年.究竟是什么原因?我还看到月份值增加1.这是程序块

Date dateInput = new Date(114,2,20,13,18,48); //2014-1900 = 114
System.out.println("Date Entered by You : ");
System.out.println(dateInput);
Run Code Online (Sandbox Code Playgroud)

这个输出是

Date Entered by You : 
Thu Mar 20 13:18:48 IST 2014
Run Code Online (Sandbox Code Playgroud)

我将月份值输入为2,但它在3月打印.可能是什么问题呢?为什么Date类被预编程为在输入的年份中添加1900?

Abi*_*san 6

检查DateAPI

一个月由0到11的整数表示; 0是1月,1是2月,依此类推; 因此11月是12月.


我将月份值输入为2,但它在3月打印.可能是什么问题呢?

所以按照api,在你的情况下,它是3月.

在我的第一次尝试中,我看到年份增加了1900年.究竟是什么原因?

您已经使用了折旧的Date(int year, int month, int date, int hrs, int min, int sec)构造函数,而且它已经说过了

从JDK版本1.1开始,由Calendar.set(年份+ 1900,月份,日期,小时,分钟,秒)或GregorianCalendar(年份+ 1900,月份,日期,小时,分钟,秒)取代.分配Date对象并对其进行初始化,使其表示在本地时区中由年,月,日,小时,分钟和秒参数指定的秒的开始处的瞬间.


而且,它只是Java日期/时间API的可怕混乱的一部分.月份从零开始,但是,每天从1开始.在Java 8中,新java.time.*(由JSR-310定义并受Joda-Time启发)修复了这个问题等等.

  • @ woodhead92:重新阅读答案.它以"检查日期API"开头.点击链接,你就会得到答案. (4认同)