如何计算JAVA中两个不同日期之间的工作日(不包括周末)?

时间:2015-09-24 10:03:13

标签: java

我的要求是计算给定两个日期之间天数的数量,不包括星期六星期日

示例:

Start date - 10/09/15 and End date 18/09/15

Result: 7

日期为DD/MM/YY格式。

代码:

import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;


public class DaysCounter {
    private String startDate;
    private String endDate;

    public void calculateDate(){
        @SuppressWarnings("resource")
        Scanner in=new Scanner(new InputStreamReader(System.in));

        System.out.println("Enter the starting date (DD/MM/YY) :");
        startDate=in.next();

        System.out.println("Enter the End date (DD/MM/YY) :");
        endDate=in.next();

        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        try
        {
            Calendar start = Calendar.getInstance();
            start.setTime(sdf.parse(startDate));
            Calendar end = Calendar.getInstance();
            end.setTime(sdf.parse(endDate));
            int workingDays = 0;
            while(!start.after(end))
            {
                int day = start.get(Calendar.DAY_OF_WEEK);
                if ((day != Calendar.SATURDAY) && (day != Calendar.SUNDAY))
                    workingDays++;
                start.add(Calendar.DATE, 1);
            }
            System.out.println(workingDays);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

    public static void main(String[] args)
    {
        DaysCounter daysCounter=new DaysCounter();
        daysCounter.calculateDate();
    }
}

以上是上述代码的结果。

1 -

Enter the starting date (DD/MM/YY) :
14/09/15
Enter the End date (DD/MM/YY) :
20/09/15

5

2 -

Enter the starting date (DD/MM/YY) :
14/09/15
Enter the End date (DD/MM/YY) :
17/09/15

2

3 -

Enter the starting date (DD/MM/YY) :
31/08/15
Enter the End date (DD/MM/YY) :
30/09/15

21

如上面第一个例子所示,结果是正确的。

但是对于第二个例子,结果不正确,预期结果为4

即使是第三个例子,结果也是错误的。

即使我输入任何工作日和星期六之间的日期,也会得到错误的结果。

请建议,应该对代码进行哪些更改。

感谢。

2 个答案:

答案 0 :(得分:4)

您在创建SimpleDateFormat时出错,更改为yy而不是yyyy

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");

这应该可以解决你的问题。我认为你的逻辑没有任何问题。

修改

根据您的评论,如果您的开始日期大于结束日期,那么您必须在while循环

之前进行交换
   if(start.after(end)) {
       Calendar tempCal;
       tempCal = start;
       start = end;
       end = tempCal;
    }

答案 1 :(得分:2)

检查以下代码:

import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;


public class DaysCounter {
private String startDate;
private String endDate;

public void calculateDate(){
    @SuppressWarnings("resource")
    Scanner in=new Scanner(new InputStreamReader(System.in));

    System.out.println("Enter the starting date (DD/MM/YY) :");
    startDate=in.next();

    System.out.println("Enter the End date (DD/MM/YY) :");
    endDate=in.next();

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    try
    {
        Calendar start = Calendar.getInstance();
        start.setTime(sdf.parse(startDate));
        Calendar end = Calendar.getInstance();
        end.setTime(sdf.parse(endDate));
        int workingDays = 0;
        while(!start.after(end))
        {
            int day = start.get(Calendar.DAY_OF_WEEK);

            day = day + 2;
            if (day > 7){
                day = day -7;
            }

            if ((day != Calendar.SATURDAY) && (day != Calendar.SUNDAY))
                workingDays++;
            start.add(Calendar.DATE, 1);
        }
        System.out.println(workingDays);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

public static void main(String[] args)
{
    DaysCounter daysCounter=new DaysCounter();
    daysCounter.calculateDate();
}
}