Как я могу добавить рабочие дни к текущей дате в Java? - PullRequest
13 голосов
/ 08 октября 2009

Как добавить рабочие дни к текущей дате в Java?

public Calendar addBusinessDate(Calendar cal, int days) {
//
// code goes over here
//
}

Примечание:

Следует учитывать и выходные.

Ответы [ 14 ]

0 голосов
/ 10 января 2019

Большинство ответов, которые я нашел в Интернете, не сработали, как ожидалось, поэтому я настроил пример для этой темы: Как получить текущую дату и добавить пять рабочих дней в Java . Код ниже, кажется, работает лучше.

public static Date addWorkingDays(Date date, int days) {
    if (days > 0) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);

        int daysAdded = 0;
        do {
            cal.add(Calendar.DATE, 1);
            if (isWorkingDay(cal)) {
                daysAdded++;
            }
        } while (daysAdded < days);

        return cal.getTime();;
    } else {
        return date;
    }
}


 private static boolean isWorkingDay(Calendar cal) {
    int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
    if (dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.SATURDAY)
        return false;
    // tests for other holidays here        
    return true;
 }
0 голосов
/ 22 августа 2016

Добавление двух рабочих дней к текущей дате:

    Date today = new Date();
    Calendar cal1 = Calendar.getInstance();
    cal1.setTime(today);

    switch(cal1.get(Calendar.DAY_OF_WEEK)){

        case 1:
                cal1.add(Calendar.DATE, 2);
                break;
        case 2: 
                cal1.add(Calendar.DATE, 2);
                break;
        case 3: 
                cal1.add(Calendar.DATE, 2);
                break;
        case 4: 
                cal1.add(Calendar.DATE, 2);
                break;
        case 5: 
                cal1.add(Calendar.DATE, 4);
                break;
        case 6: 
                cal1.add(Calendar.DATE, 4);
                break;
        case 7: 
                cal1.add(Calendar.DATE, 3);
                break;

    }

    // You may also set the time to meet your purpose: 
    cal1.set(Calendar.HOUR_OF_DAY, 23);
    cal1.set(Calendar.MINUTE, 59);
    cal1.set(Calendar.SECOND, 59);
    cal1.set(Calendar.MILLISECOND, 00);

    Date twoWeekdaysAhead = cal1.getTime();
0 голосов
/ 28 мая 2015

Это работает для меня, коротко и просто:

public static Date getBusinessDay(final Date date, final int businessDaysFromDate) {

final int max = 60;
if (date == null) {
  return getBusinessDay(new Date(), businessDaysFromDate);
} else if (date != null && (businessDaysFromDate < 0 || businessDaysFromDate > max)) {
  return getBusinessDay(date, 0);
} else {
  final Calendar baseDateCal = Calendar.getInstance();
  baseDateCal.setTime(date);
  for (int i = 1; i <= businessDaysFromDate; i++) {
    baseDateCal.add(Calendar.DATE, 1);
    while (baseDateCal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || baseDateCal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
      baseDateCal.add(Calendar.DATE, 1);
    }
  }
  return baseDateCal.getTime();
}

}

0 голосов
/ 14 января 2015
/* To Calculate 10 business days ahead of today's date
*/
public class DueDate {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        DueDate d = new DueDate();
        String dueDate = d.getDueDate(10);
        System.out.println("due Date " + dueDate);
    }
    public String getDueDate(int bday){
        Calendar cal = new GregorianCalendar();
        SimpleDateFormat fdate = new SimpleDateFormat("MM/dd/yyyy");
        while(bday > 0){
            cal.add(Calendar.DAY_OF_MONTH, 1);
            if(noWeekendsorHolidays(cal)){
                bday--;
            }
        }
        return fdate.format(cal.getTime());
    }

    public boolean noWeekendsorHolidays(Calendar cal){
        int day = cal.get(Calendar.DAY_OF_WEEK);
        if(day == 1 || day == 7){
            return false;
        }
        return true;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...