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

Sha*_*ran 5 java

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

例:

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

Result: 7
Run Code Online (Sandbox Code Playgroud)

日期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();
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是上述代码的结果.

1 -

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

5
Run Code Online (Sandbox Code Playgroud)

2 -

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

2
Run Code Online (Sandbox Code Playgroud)

3 -

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

21
Run Code Online (Sandbox Code Playgroud)

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

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

即使是第三个例子,结果也是不正确的.

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

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

谢谢.

Nit*_*ani 5

你创建时有错误SimpleDateFormat,改为yy改为yyyy

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
Run Code Online (Sandbox Code Playgroud)

这应该可以解决您的问题。我没有看到你的逻辑有任何问题。

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

   if(start.after(end)) {
       Calendar tempCal;
       tempCal = start;
       start = end;
       end = tempCal;
    }
Run Code Online (Sandbox Code Playgroud)