我想从约会那里获得一年,而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年
日期类显示正确的年份,但日历显示错误的年份
答案 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
创建year
,month
,day
和使用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