使用java指向上一个工作日

cra*_*din 6 java

我是使用java.calendar.api的新手.我想指出使用java的某一天的前一个工作日.但是当我使用calendar.api操作日期时条件会继续增加,因为我必须考虑通常的周末和指向上个月,而且我还要考虑我所在地区的地区假期......

例如:说我必须考虑美国假期并指出前一天.

有什么方法可以定义我自己的日历并使用它,以便日期操作感知所有那些通常的变化?

Whi*_*g34 8

虽然您应该考虑使用Joda Time库,但这里是Java Calendar API的开始:

public Date getPreviousWorkingDay(Date date) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);

    int dayOfWeek;
    do {
        cal.add(Calendar.DAY_OF_MONTH, -1);
        dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
    } while (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY);

    return cal.getTime();
}
Run Code Online (Sandbox Code Playgroud)

这只考虑周末.您必须添加额外的检查才能处理您考虑假期的日子.例如,你可以添加|| isHoliday(cal)while条件.然后实现该方法,如:

public boolean isHoliday(Calendar cal) {
    int year = cal.get(Calendar.YEAR);
    int month = cal.get(Calendar.MONTH) + 1;
    int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);

    if (month == 12 && dayOfMonth == 25) {
        return true;
    }

    // more checks

    return false;
}
Run Code Online (Sandbox Code Playgroud)