How can I find Saturdays and Sundays in A given month?

后端 未结 4 1694
攒了一身酷
攒了一身酷 2020-12-17 22:34

I want find all Saturdays and Sundays in A given month. How can I do so?

相关标签:
4条回答
  • 2020-12-17 23:15

    Try this:

    import java.util.Calendar;
    import java.util.GregorianCalendar;
    
    public class Sundays {
        public static void main(String[] args) {
            int year = 2012;
    
            // put the month you want
            int month = Calendar.JANUARY;
    
            Calendar cal = new GregorianCalendar(year, month, 1);
            do {
                int day = cal.get(Calendar.DAY_OF_WEEK);
                if (day == Calendar.SATURDAY || day == Calendar.SUNDAY) {
                    System.out.println(cal.get(Calendar.DAY_OF_MONTH));
                }
                cal.add(Calendar.DAY_OF_YEAR, 1);
            }  while (cal.get(Calendar.MONTH) == month);
        }
    }
    
    0 讨论(0)
  • 2020-12-17 23:17

    The simplest way is to just iterate over all the days in the month, and check the day of week for each of them. For example:

    // This takes a 1-based month, e.g. January=1. If you want to use a 0-based
    // month, remove the "- 1" later on.
    public int countWeekendDays(int year, int month) {
        Calendar calendar = Calendar.getInstance();
        // Note that month is 0-based in calendar, bizarrely.
        calendar.set(year, month - 1, 1);
        int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    
        int count = 0;
        for (int day = 1; day <= daysInMonth; day++) {
            calendar.set(year, month - 1, day);
            int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
            if (dayOfWeek == Calendar.SUNDAY || dayOfweek == Calendar.SATURDAY) {
                count++;
                // Or do whatever you need to with the result.
            }
        }
        return count;
    }
    

    I'm absolutely sure there are far more efficient ways of doing this - but that's what I'd start with, and optimize when I'd found it's too slow.

    Note that if you're able to use Joda Time that would make your life a lot easier...

    0 讨论(0)
  • 2020-12-17 23:21

    Base on the previous answer, I have a small modification When u find the first Saturday and Sunday, you can simply add 7 days to it until the month is changed.

    0 讨论(0)
  • 2020-12-17 23:38

    Please go through this method, I faced a lot finally I created my own.

    public static int getDayDiff(String dateFrom, String dateTo){ // DD/MM/YYYY
        Timestamp tDtF = getTimestampDDmmYYYY(dateFrom);//returning timestamp from / DD/MM/YYYY
        Timestamp tDtT = getTimestampDDmmYYYY(dateTo);
        Calendar dtF = new GregorianCalendar();
        Calendar dtT = new GregorianCalendar();
        dtF.setTimeInMillis(tDtF.getTime());
        dtT.setTimeInMillis(tDtT.getTime());
        int count = 0;
        while(dtF.before(dtT)){
            count++;
            dtF.add(Calendar.DAY_OF_YEAR, 1);
        }
        return count;
    }
    
    public static int countDateSatOrSun(String dateFrom, String dateTo){//DD/MM/YYYY
        Timestamp tDtF = getTimestampDDmmYYYY(dateFrom);//returning timestamp from / DD/MM/YYYY
        Timestamp tDtT = getTimestampDDmmYYYY(dateTo);
        Calendar dtF = new GregorianCalendar();
        Calendar dtT = new GregorianCalendar();
        dtF.setTimeInMillis(tDtF.getTime());
        dtT.setTimeInMillis(tDtT.getTime());
        int count = 0;
        while(dtF.before(dtT)){
            if((dtF.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY| dtF.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY))
                    count++;
            dtF.add(Calendar.DAY_OF_YEAR, 1);
        }
        return count;
    }
    

    It will give you exact result.

    0 讨论(0)
提交回复
热议问题