Den*_*is 1 java calendar date gettime
我正在为Android构建CalendarDisplay应用程序.除此之外,该应用程序允许用户选择添加到纪元的天数(纪元是1899年的日期),并且该结果将在显示器上以图形方式表示.但是,当我从日历值设置日期值时,我得到了意想不到的结果:年份似乎偏离了1900的值.虽然我可以简单地将1900添加到结果中,但这似乎是错误的答案,因为我在做什么是(我相信)这本书.或者我可以继续我拥有的东西; 这也有效.但是,它有相同的副本问题.这是代码,带有用于调试的备用变量:
public void gotoCal(int days) {
// epochCal has been initialized as follows:
// (HYF_BASE_YEAR = 1899, HYF_BASE_MONTH = 11, HYF_BASE_DAY = 1)
// epochCal = (Calendar) Calendar.getInstance();
// epochCal.set(HYF_BASE_YEAR, HYF_BASE_MONTH, HYF_BASE_DAY);
Calendar cal = (Calendar) epochCal.clone();
cal.add(Calendar.DATE, days);
int year = cal.get(Calendar.YEAR);
Date date = cal.getTime();
int year2 = date.getYear();
if (year2 != year) {
date.setYear(year);
}
int year3 = date.getYear();
gotoDate(date);
}
Run Code Online (Sandbox Code Playgroud)
现在,当我在调试模式下以gotoCal(40000)运行此代码时,在gotoDate()行有一个断点,我在字段中看到以下值:year = 2009,year2 = 109,year3 = 2009
Calendar.getTime()函数是否应该返回过去1900年的日期(我没有看过这样的文档)?或者我可能会做些什么来影响它呢?或者我还有什么可能做错的?
您误读(或未阅读)以下文档Date.getYear:
返回一个值,该值是从包含或以此Date对象表示的时刻开始的年份减去1900的结果,如本地时区中所解释的那样.
也:
Date.getYear已被弃用,并且有充分的理由.它使用默认时区,基本上不应该使用.
乔达时间是多少更好的日期和时间API.我完全建议使用它代替Date/ Calendar.