Как получить каждый день, кроме выходных или субботы или воскресенья между двумя датами в Java?

Привет всем, как генерировать даты, если даты начала и окончания указаны в Java?

как следующее:

Пример: еслиstart date is 15-04-2012 а такжеend date is 15-06-2012 имея это, я хочу, чтобы даты были похожи на следующие, и список должен опуститьsaturday а такжеsunday

1.15-04-2012, 2.16-04-2012, 3.17-04-2012, . . . . . . 15-06-2012

I have done like the following but it will generate for one month if the date range is of same month. `

public static ConcurrentHashMap<String, String> getWorkingDaysMap(int year, int month, int day){
        int totalworkingdays=0,noofdays=0;
        String nameofday = "";
        ConcurrentHashMap<String,String> workingDaysMap = new ConcurrentHashMap<String,String>();
        Map<String,String> holyDayMap = new LinkedHashMap<String,String>();
        noofdays = findNoOfDays(year,month,day);

        for (int i = 1; i <= noofdays; i++) {
            Date date = (new GregorianCalendar(year,month - 1, i)).getTime(); // year,month,day
            SimpleDateFormat f = new SimpleDateFormat("EEEE");
            nameofday = f.format(date);

            String daystr="";
            String monthstr="";

            if(i<10)daystr="0";
            if(month<10)monthstr="0";

            String formatedDate = daystr+i+"/"+monthstr+month+"/"+year;

            if(!(nameofday.equals("Saturday") || nameofday.equals("Sunday"))){
                workingDaysMap.put(formatedDate,formatedDate);
                totalworkingdays++;
            }
        }

        return workingDaysMap;
    }

Поэтому, пожалуйста, посоветуйте, как мне поступить.

С уважением Тони

Ответы на вопрос(4)

public static void main(String[] args) {

    Calendar calendar = Calendar.getInstance();

    //15-04-2012
    calendar.set(Calendar.DAY_OF_MONTH, 15);
    calendar.set(Calendar.YEAR, 2012);
    calendar.set(Calendar.HOUR, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MONTH, 3);
    Date start = calendar.getTime();

    //15-06-2012
    calendar.set(Calendar.MONTH, 5);
    Date end = calendar.getTime();

    calendar.setTime(start);
    Date d = null;
    while((d = calendar.getTime()).before(end) || d.equals(end)) {
        int day = calendar.get(Calendar.DAY_OF_WEEK);
        if (day != Calendar.SATURDAY && day != Calendar.SUNDAY) {
            System.out.println(d);
        }
        calendar.add(Calendar.DAY_OF_MONTH, 1);
    } 
}
Решение Вопроса

Joda времени

import org.joda.time.DateTimeConstants;
import org.joda.time.LocalDate;

public class DatesexcludingWeekend {
    public static void main(String[] args) {
        final LocalDate start = new LocalDate(2012, 06, 15);
        final LocalDate end = new LocalDate(2012, 07, 14);
        LocalDate weekday = start;
        if (start.getDayOfWeek() == DateTimeConstants.SATURDAY|| start.getDayOfWeek() == DateTimeConstants.SUNDAY) {
            weekday = weekday.plusWeeks(1).withDayOfWeek(DateTimeConstants.MONDAY);
        }

        while (weekday.isBefore(end)) {
            System.out.println(weekday);
            if (weekday.getDayOfWeek() == DateTimeConstants.FRIDAY)
                weekday = weekday.plusDays(3);
            else
                weekday = weekday.plusDays(1);
        }
    }
int noOfDaysBetween = 5;
Calendar cal  = Calendar.getInstance();
cal.setTime(startDate);

for(int index = 0 ; index < noOfDaysBetween; index++){
    int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
    if( dayOfWeek!=Calendar.SUNDAY && dayOfWeek!=Calendar.SATURDAY) {
        System.out.println(cal.getTime());
    }
    cal.add(Calendar.DATE, 1);
}
 15 июн. 2012 г., 12:55
Calendar.DATE и Calendar.DAY_OF_MONTH являются синонимами. Calendar.add позаботится о правильном результате.
 15 июн. 2012 г., 13:03
@sudocode ты прав
 SAR15 июн. 2012 г., 12:31
что будет, если количество дней больше 31? если вы видите вопрос, звездная дата и дата окончания не попадают в один и тот же месяц.
 15 июн. 2012 г., 13:03
@ Тони чекthis example
 15 июн. 2012 г., 12:54
Просто поместите этот код в ваш основной метод и попробуйте запустить и наблюдать за поведением

import java.time.DayOfWeek;
import java.time.LocalDate;

public class Game {
    public static void main(String[] args) {
       LocalDate start = LocalDate.of(2018, 6, 1);
       LocalDate end = LocalDate.of(2018, 8, 1);

       LocalDate d = start;
       while(d.compareTo(end) <= 0) {
         if (d.getDayOfWeek() != DayOfWeek.SATURDAY && d.getDayOfWeek() != DayOfWeek.SUNDAY) {
            System.out.println(d);
         }
         d = d.plusDays(1);
      }
   }
}
 24 июн. 2018 г., 21:52
Подсказка: вы можете сделать это немного используяEnumSet, определятьSet<DayOfWeek> weekend = EnumSet.of( DayOfWeek.SATURDAY, DayOfWeek.SUNDAY ); и проверитьweekend.contains( d.getDayOfWeek() ),EnumSet занимает мало памяти и очень быстро выполняется (только внутренняя битовая карта).

Ваш ответ на вопрос