Here you can find the source of getWorkingDay(Calendar d1, Calendar d2)
private static int getWorkingDay(Calendar d1, Calendar d2)
//package com.java2s; //License from project: Open Source License import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; public class Main { private static int getWorkingDay(Calendar d1, Calendar d2) { int result = -1; if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end Calendar swap = d1;//from www. j a v a 2s . c o m d1 = d2; d2 = swap; } int charge_start_date = 0; int charge_end_date = 0; int stmp; int etmp; stmp = 7 - d1.get(Calendar.DAY_OF_WEEK); etmp = 7 - d2.get(Calendar.DAY_OF_WEEK); if (stmp != 0 && stmp != 6) { charge_start_date = stmp - 1; } if (etmp != 0 && etmp != 6) { charge_end_date = etmp - 1; } result = (getDaysBetween(getNextMonday(d1), getNextMonday(d2)) / 7) * 5 + charge_start_date - charge_end_date; return result; } public static int getDaysBetween(Calendar d1, Calendar d2) { if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end Calendar swap = d1; d1 = d2; d2 = swap; } int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR); int y2 = d2.get(Calendar.YEAR); if (d1.get(Calendar.YEAR) != y2) { d1 = (Calendar) d1.clone(); do { days += d1.getActualMaximum(Calendar.DAY_OF_YEAR); d1.add(Calendar.YEAR, 1); } while (d1.get(Calendar.YEAR) != y2); } return days; } public static int getDaysBetween(String beginDate, String endDate) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date bDate = null; Date eDate = null; try { bDate = format.parse(beginDate); eDate = format.parse(endDate); } catch (ParseException e) { return -1; } Calendar d1 = new GregorianCalendar(); d1.setTime(bDate); Calendar d2 = new GregorianCalendar(); d2.setTime(eDate); int days = d2.get(6) - d1.get(6); int y2 = d2.get(1); if (d1.get(1) != y2) { d1 = (Calendar) d1.clone(); do { days += d1.getActualMaximum(6); d1.add(1, 1); } while (d1.get(1) != y2); } return days; } private static Calendar getNextMonday(Calendar date) { Calendar result = null; result = date; do { result = (Calendar) result.clone(); result.add(Calendar.DATE, 1); } while (result.get(Calendar.DAY_OF_WEEK) != 2); return result; } }