Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

java

My requirement is to calculate the number of Days between the given 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();
    }
}

Here 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 seen in the above 1st example the result is correct.

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

Even the third example, result is incorrect.

Even when I enter the date between any weekday and a Saturday getting an incorrect result.

Kindly suggest, what changes should be made to the code.

Thanks.

like image 981
Shashi Kiran Avatar asked Sep 24 '15 10:09

Shashi Kiran


People also ask

How do you calculate the difference between two dates excluding weekends?

=WORKDAY(start_date, days, [holidays]) If you'd like to exclude holidays in addition to weekends, create a range of holidays to refer to in the formula. This list may include multiple years and can be stored in a different worksheet or even another workbook.

How do I calculate between two dates in Java?

Find the time difference between two dates in milliseconds by using the method getTime() in Java as d2. getTime() – d1. getTime(). Use date-time mathematical formula to find the difference between two dates.

How do you calculate work days between dates?

To calculate the number of working days between two dates, we must follow these steps: Count the number of days between the two dates. Subtract the number of weekend days between the two dates.


1 Answers

You have mistake in 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 issues in your logic.

EDIT

As per your comments, if your start date is greater than end date then you have to swap it before while loop

   if(start.after(end)) {
       Calendar tempCal;
       tempCal = start;
       start = end;
       end = tempCal;
    }
like image 151
Nitesh Virani Avatar answered Oct 13 '22 11:10

Nitesh Virani