Вы бы упорядочили даты по ближайшим.
Дата начала установлена на 0:
long ret = 0;
Теперь вам нужно перебрать свой список и сохранить ближе к желаемой дате
for(Date d : dates){
if(Math.abs(curDate.getTime() - ret) > Math.abs(curDate.getTime() - d.getTime())){
ret = d.getTime();
}
}
return new Date(ret);
Оператор if
проверяет, какая дата ближе, сравнивая миллисекундное время. Используя Math.abs, вы исключаете направление (до или после).