Java中的NETWORKDAYS.INTL

Java中的NETWORKDAYS.INTL,java,Java,Excel有一个名为NETWORKDAYS.INTL的函数。它接收开始日期、结束日期、周末“类型”和假日列表,并计算两个日期之间的工作日数。周末的旗帜很重要,因为我可以把星期六当作工作日。更多信息请点击此处: Java中是否有类似NETWORKDAYS.INTL的东西?使用ObjectLab Kit、Joda和Jollyday,我可以保留我的国家假日,并检查这一天是星期六、星期天还是假日,但要像上面的函数一样计算,我需要每天迭代并检查是否有效。我没有发现任何东西,所以我只编写了自己的方法。在我

Excel有一个名为NETWORKDAYS.INTL的函数。它接收开始日期、结束日期、周末“类型”和假日列表,并计算两个日期之间的工作日数。周末的旗帜很重要,因为我可以把星期六当作工作日。更多信息请点击此处:


Java中是否有类似NETWORKDAYS.INTL的东西?使用ObjectLab Kit、Joda和Jollyday,我可以保留我的国家假日,并检查这一天是星期六、星期天还是假日,但要像上面的函数一样计算,我需要每天迭代并检查是否有效。

我没有发现任何东西,所以我只编写了自己的方法。在我的应用程序中,所有日期都保存为时间戳

public boolean isHoliday(long date) {
    return holidaysCalendar.isHoliday(new LocalDate(date));
}

public boolean isSaturday(long date) {
    return (new LocalDate(date).dayOfWeek().get() == 7);
}

public boolean isSunday(long date) {
    return (new LocalDate(date).dayOfWeek().get() == 1);
}

public boolean isValid(long date, boolean saturday, boolean sunday) {
    boolean valid = true;
    if (isHoliday(date)) {
        valid = false;
    } else {
        if (!saturday && isSaturday(date)) {
            valid = false;
        }
        if (!sunday && isSunday(date)) {
            valid = false;
        }
    }
    return valid;
}

public long addDays(long date, int days) {
    return new LocalDate(date).plusDays(days).toDateTimeAtStartOfDay()
            .getMillis();
}

public int validDaysBetweenDates(long date1, long date2,
        boolean saturday, boolean sunday) {
    date1 = addDias(date1, 1);
    int cont = 0;
    for (long dateTmp = date1; dataTmp <= date2; dataTmp = addDays(dataTmp, 1)) {
        if (isValid(dataTmp, saturday, sunday))
            cont++;
    }
    return cont;
}
公共假日(长日期){
返回holidaysCalendar.isHoliday(新的LocalDate(日期));
}
公众假期(长日期){
return(newlocaldate(date).dayOfWeek().get()=7);
}
公共发行日(长日期){
return(newlocaldate(date).dayOfWeek().get()=1);
}
公共布尔值有效(长日期、布尔值周六、布尔值周日){
布尔有效=真;
如果(isHoliday(日期)){
有效=错误;
}否则{
如果(!星期六和星期六(日期)){
有效=错误;
}
如果(!星期日和星期日(日期)){
有效=错误;
}
}
返回有效;
}
公共长添加天数(长日期,整数天){
返回新的LocalDate(date).plusDays(days).toDateTimeAtStartOfDay()
.getMillis();
}
public int validDaysBetweenDates(长日期1、长日期2、,
布尔周六、布尔周日){
date1=addDias(date1,1);
int cont=0;

对于(long dateTmp=date1;dataTmp),您可以通过使用
DayOfWeek
enum而不仅仅是整数来简化此代码。
myLocalDate.getDayOfWeek().equals(DayOfWeek.MONDAY)