Исходя из вашего вопроса и комментариев, вы пытаетесь решить проблему следующим образом:
- если сегодня рабочий день, вернуть последний рабочий день прошлого месяца
- если сегодня не рабочий день, то:
- если самый последний рабочий день - последний день месяца, вернуть самый последний рабочий день
- возвращаем последний рабочий день прошлого месяца
Вот реализация с библиотекой финансового планирования Lamma (http://lamma.io). Метод Date.backward(Calendar)
используется для поиска самого последнего рабочего дня.
Если вы действительно хотите реализовать в Joda, то вам нужно реализовать Date.pastMonthEnd () и Date.backward (Calendar) самостоятельно.
public static void main(String [] args) {
// print 2014-05-30, because 2014-05-31 is holiday
System.out.println(findDate(new Date(2014, 5, 31)));
// print 2014-04-30
System.out.println(findDate(new Date(2014, 5, 30)));
// print 2014-04-30, because the most recent working day of 2014-05-25 is not the last working day of May
System.out.println(findDate(new Date(2014, 5, 25)));
}
private static HolidayRule cal = weekends(); // let's use weekend calendar for now
public static Date findDate(Date current) {
if (cal.isHoliday(current)) {
Date lastWorkingDayOfThisMonth = current.lastDayOfMonth().backward(cal);
Date mostRecentWorkingDay = current.backward(cal);
if (lastWorkingDayOfThisMonth.equals(mostRecentWorkingDay)) {
return mostRecentWorkingDay;
} else {
return lastWorkingDayOfLastMonth(current);
}
} else {
return lastWorkingDayOfLastMonth(current);
}
}
public static Date lastWorkingDayOfLastMonth(Date d) {
return d.lastDayOfPreviousMonth().backward(cal);
}