Calendar.get(Calendar.YEAR)返回错误的年份

时间:2017-09-01 09:05:56

标签: java date calendar

我想从约会那里获得一年,而Calendar.get(Calendar.YEAR)我得到的是3917而不是2017年?但是当我尝试用date.getYear()检查输出时,它会返回正确的年份。

Date date = new Date(year, month, day);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Log.d(TAG, "onClick: year "+date.getYear());
Log.d(TAG, "onClick: year "+calendar.get(Calendar.YEAR));

输出:

  

onClick:2017年

     

onClick:3917年

日期类显示正确的年份,但日历显示错误的年份

3 个答案:

答案 0 :(得分:5)

Here's Date类的Javadoc,这就是它所说的关于你正在使用的构造函数的内容:

  

已过时。从JDK 1.1版开始,由Calendar.set(year +。)取代   1900年,月,日)或GregorianCalendar(年+ 1900,月,日)。

     

分配一个Date对象并初始化它以便它代表   午夜,当地时间,在指定日期的开始   年,月和日期参数。

此外,这里是参数的解释:

  

参数

     

年 - 减去1900年。

     月份 - 月份之间的月份   0-11。

     

日期 - 1-31之间的某一天。

当您将1900添加到您传递的值时,您获得的结果年份为3917

答案 1 :(得分:3)

如其他答案中所述,Date年是1900的一年(the complete answer of Darshan Mehta中的更多信息)。

但是有一个更简单的解决方案,使用LocalDate.of创建yearmonthday和使用LocalDate.getYear获取特定年份的日期:

java.time.LocalDate date = java.time.LocalDate.of(2017, 9, 1);
System.out.println(date.getYear());
  

2017

java.util.Date已过时(并且您使用的所有方法都已弃用),您应该查看更具可读性和功能性的java.time api

答案 2 :(得分:1)

日期方法:

sm

如您所见,1900会添加到您的日历日期。结果是3917