Как насчет:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, -1);
Date thendate = cal.getTime();
Возвращает одно и то же время суток независимо от летнего времени или високосных годов, короче и четче ...
Как правило, Calendar
- это путь в таких случаях (если вы не используете стороннюю библиотеку, такую как Joda Time). Вы можете использовать его для всех видов вычислений: добавьте N дней / часов / месяцев / секунд, урежьте время до целого часа и т. Д. - вещи, которые будут слишком болезненными только с long
.
Что касается вашего исходного вопроса, он, похоже, является жертвой целочисленного переполнения. Это работает, если умножение явно использует long:
long differencems = 365 * 24 * 60 * 60 * 1000L;