请关注我:
我只是想在当前日期添加10年,然后从中减去过期日期以返回年数:
public int getMaxYears() {
int max = 0;
Calendar ten_year_later = Calendar.getInstance();
ten_year_later.setTime(new Date());
ten_year_later.add(Calendar.YEAR, 10);
Calendar expiration = Calendar.getInstance();
expiration.setTime(expiration_date);
max = (int) (ten_year_later.getTimeInMillis() - expiration.getTimeInMillis())/(365 * 24 * 60 * 60 * 1000);
return max;
}
Run Code Online (Sandbox Code Playgroud)
当我调试它时,日历始终保持在当前年份.
任何人 ?
sta*_*ker 11
你有一个int/long转换问题:365*24*60*60*1000其评估为31536000000,因此超过Integer.MAX_VALUE2147483647这适用:
public static void main(String[] args) {
Calendar ten_year_later = Calendar.getInstance();
System.out.println( ten_year_later.getTime() );
ten_year_later.setTime(new Date());
ten_year_later.add(Calendar.YEAR, 10);
System.out.println( ten_year_later.getTime() );
Calendar expiration = Calendar.getInstance();
expiration.setTime(expiration.getTime());
long max = (ten_year_later.getTimeInMillis() - expiration.getTimeInMillis())/(365 * 24 * 60 * 60 * 1000L);
System.out.println( "max " + max );
}
Run Code Online (Sandbox Code Playgroud)
你的计算max是错误的.一个int不能以毫秒每年举行.
而是替换它
max = ten_year_later.get(Calendar.YEAR) - expiration.get(Calendar.YEAR);
Run Code Online (Sandbox Code Playgroud)
或者更好,使用JodaTime:
DateTime tenYearsLater = new DateTime().plusYears(10);
DateTime expiration = new DateTime(expiration_date.getTime());
Period period = new Period(expiration, tenYearsLater);
return period.getYears();
Run Code Online (Sandbox Code Playgroud)
这是一个简单的例子,说明什么应该起作用。
Calendar cal = new GregorianCalendar();
cal.setTime(new Date());
cal.add(Calendar.YEAR, yearsToAdd);
Date retDate = cal.getTime();
Run Code Online (Sandbox Code Playgroud)
请记住使用 long 来获取以毫秒为单位的时间!