У меня были некоторые реальные проблемы с созданием метода для выполнения следующего: отметка времени unix и int, представляющая период времени для получения первой даты, и метод возвращает временную метку unix, представляющую первый день того времени. Метод я использую сейчас использует класс календарь выглядит следующим образом:Поиск первого дня кратного X лет
public static long firstTime(long in, int period){
if(period == DAY_OF_FIVE_YEARS){
period = Calendar.DAY_OF_YEAR;
in -= in%Vars.FIVE_YEARS;
}
cal.setTimeInMillis(in*1000L);
cal.set(period,cal.getActualMinimum(period));
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
return cal.getTimeInMillis()/1000L;
}
Однако иногда мне нужно, чтобы получить первый день пять лет. Например, я прохожу в дате в 1987 году, и я хочу, чтобы метод возвращался в первый день 1985 года. В первом случае это моя попытка, но это не работает, и мне интересно, есть ли проще. Обратите внимание, что DAY_OF_FIVE_YEARS - это некоторый int, который означает это, а Vars.FIVE_YEARS - это длинное число секунд в пять лет.
Не пробовал этого, но как насчет того, если _после_ вы создали 'cal', то' года = cal.get (Calendar.YEAR); cal.roll (Calendar.YEAR, - (год% 5)); '? Я не самый большой эксперт «Календарь», поэтому я не знаю, правильно ли это, не пытаясь это сделать. Я предполагаю, что причина, по которой ваш метод не работает, объясняется високосными годами, так что количество секунд в пятилетний период не является постоянным. – ajb
Сколько лет пять? –
@ElliottFrisch Больше похоже на «даже пятилетний период» или что-то - «даже» не всегда означает делимый на 2. – ajb