java.sql.Date使用了错误的日期

java.sql.Date使用了错误的日期,java,date,Java,Date,我使用下面的代码 private static Date date = new Date (2014-1900,11,25); System.out.println(date); 它正在显示2014-12-25。我不明白为什么它给我的日期是12 如果我给 private static Date date = new Date (2014-1900,12,25); 它正在返回2015-01-25 有人能帮助理解这一点吗? 它接受12月月份为11,因为月份从0-11开始首先,您不应该使用此构

我使用下面的代码

private static Date date = new Date (2014-1900,11,25); 
System.out.println(date);
它正在显示
2014-12-25
。我不明白为什么它给我的日期是
12

如果我给

private static Date date = new Date (2014-1900,12,25); 
它正在返回
2015-01-25

有人能帮助理解这一点吗?


它接受
12月
月份为
11
,因为月份从
0-11开始
首先,您不应该使用此构造函数,因为它已被弃用

第二:请参阅此构造函数的:

参数:年份- 年份减去1900.month-0-11之间的月份。日期-日期 1-31之间的月份。另请参见:日历

month是一个基于空的值,因此0-->Jan。。。11-->十二月从


月份范围从
0-11,即1月到12月

为避免使用定价降低的构造函数来设置日期,建议使用类

您还可以使用设置/格式化日期值:-

SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Date date = sdf.parse("25-11-2014");

月份以0为基础。最好使用新的java time api,或者如果无法升级到java 8,则使用joda time。使用simpledateformat启动日期只会浪费CPU周期和可能的线程问题,但最好是浪费CPU周期,而不是使用
new date(2014-1900,11,25)浪费时间设置日期不知道出了什么问题。我已经更新了我的答案,请再次检查,看看是否真的需要否决!
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 2014);
calendar.set(Calendar.MONTH, Calendar.NOVEMBER);
calendar.set(Calendar.DAY_OF_MONTH, 25);
Date date = calendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Date date = sdf.parse("25-11-2014");