如何在Java中获取两个日期之间的星期六和星期日

3
StartDate:  2016-05-8 20:16:00;
EndDate:    2016-05-30 20:16:00;


     public int saturdaysundaycount(Date d1, Date d2) {
                Calendar c1 = Calendar.getInstance();
                c1.setTime(d1);

                Calendar c2 = Calendar.getInstance();
                c2.setTime(d2);

                int sundays = 0;
                int saturday = 0;

                while (c1.after(c2)) {
                    if (c2.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY || c2.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
                        sundays++;
                    saturday++;
                    c2.add(Calendar.DATE, 1);
                    c2.add(Calendar.DATE, 1);
                }
                System.out.println(sundays);

                return saturday + sundays;
            }

在这个函数中,我试图获取两个日期之间星期六和星期天的总数。但是当我传递日期时,结果为零。请指出错误并提出更正建议。

1
类似的问题在这里得到了解答。请改变逻辑。 - Amol Bais
我已经尝试过了,亲爱的,但我无法完成它,它总是返回0。 - Research Development
1
如果(startCal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY && startCal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY),我已经应用了这个逻辑。 - Research Development
你为什么要执行两次 c2.add(Calendar.DATE, 1); - Mrunal Pagnis
c2.add(Calendar.DATE, 2); - Research Development
你可以使用Joda Time来更轻松地实现 :D http://www.joda.org/joda-time/ - Mark Vincent Osea
4个回答

9

写完整的程序并不可取,但由于你已经付出了努力,这里有一个在我的系统上似乎有效并返回值为 7 的示例。

public class CountWeekends {

    public static void main(String[] args){

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        int count = 0;
        try {
            Date d1 = formatter.parse("2016-05-8 20:16:00");
            Date d2 = formatter.parse("2016-05-30 20:16:00");
            count = saturdaysundaycount(d1,d2);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        System.out.println("Count of Sats & Sundays = "+count);
    }

    public static int saturdaysundaycount(Date d1, Date d2) {
        Calendar c1 = Calendar.getInstance();
        c1.setTime(d1);

        Calendar c2 = Calendar.getInstance();
        c2.setTime(d2);

        int sundays = 0;
        int saturday = 0;

        while (! c1.after(c2)) {
            if (c1.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY ){
                saturday++; 
            }
            if(c1.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){
                sundays++;
            }

            c1.add(Calendar.DATE, 1);
        }

        System.out.println("Saturday Count = "+saturday);
        System.out.println("Sunday Count = "+sundays);
        return saturday + sundays;
    }

逻辑:您需要将 开始日期 每次增加一天,直到超过 结束日期,并在 开始日期 上检查 day


2
问题出在你的 while 循环中,对于我来说,这段代码很好地工作了。
检查一下 endDatestartDate ,因为我猜想你发送的顺序是错误的。
while (endDate.after(startDate)) {
  if (endDate.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY ){
    sundays++;
  }else if (endDate.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){
    saturday++;
  }

  endDate.add(Calendar.DATE, -1);
}

获取方法出现错误。 - Research Development

0
public static int getNumberofSundays(String d1,String d2) throws Exception{ //object in Date form
    Date date1=getDate(d1);
    Date date2=getDate(d2);

    Calendar c1=Calendar.getInstance();
    c1.setTime(date1);
    Calendar c2=Calendar.getInstance();
    c2.setTime(date2);
    int sundays=0;
    while(c1.after(c2)){
        if(c2.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
            sundays++;
            c2.add(Calendar.DATE,1);
        }
    }
    System.out.println("number of days between 2 dates"+sundays);

    return sundays;
}

我们不仅要添加星期日,还要添加星期六。 - Research Development
1
兄弟,同样的方式计算星期六。 - chandrakant
看这个,就是它,但是它不起作用。 - Research Development
@研发部门 "404未找到" - The incredible Jan

0
你的代码没有循环遍历日期。请尝试以下代码。在 while 循环中,它会循环遍历给定第一个日期和最后一个日期之间的所有日期。这是通过在每次迭代中将一天添加到 c1 直到 c1 在 c2 之后实现的。这样可以得到给定日期之间的周六和周日的数量,包括这两天。
public static int saturdaysundaycount(Date d1, Date d2) {
    Calendar c1 = Calendar.getInstance();
    c1.setTime(d1);

    Calendar c2 = Calendar.getInstance();
    c2.setTime(d2);

    int sundays = 0;
    int saturdays = 0;

    while (!c1.after(c2)) {
        SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd-E");
        String formatted = format1.format(c1.getTime());
        System.out.println("Current Date C1 : " + formatted);

        if (c1.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
            sundays++;
        } else if (c1.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
            saturdays++;
        }
        c1.add(Calendar.DATE, 1);
    }

    System.out.println("Sundays : " + sundays);
    System.out.println("Saturdays : " + saturdays);

    return saturdays + sundays;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接