How to calculate working (excluding weekends) days between two different dates in JAVA?

My requirement is to calculate the number of Days between two dates, excluding Saturday and Sunday .

Example:

Start date - 10/09/15 and End date 18/09/15 Result: 7 

Date is in DD/MM/YY format.

Code:

 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(); } } 

Below are the results for the above code.

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 

As you can see from the first example above, the result is correct.

But for the second example, the result is incorrect, the expected result is 4 .

Even the third example, the result is incorrect.

Even when I enter a date between a weekday and a Saturday, I get the wrong result.

Please indicate what changes should be made to the code.

Thanks.

+5
source share
2 answers

You have an error creating SimpleDateFormat , change to yy instead of yyyy

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

This should solve your problems. I do not see any problems in your logic.

EDIT

According to your comments, if your start date is greater than the end date, you need to change it before the while loop

  if(start.after(end)) { Calendar tempCal; tempCal = start; start = end; end = tempCal; } 
+4
source

Check out the code below:

 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(); } } 
+2
source

Source: https://habr.com/ru/post/1232176/


All Articles