package com.date.utlit; import java.text.simpledateformat; import java.util.calendar; import java.util.date; import java.util.gregoriancalendar; /** * 计算任意2个日期内的工作日(没有考虑到国定假日) * @author user * */ public class datecal { /** * @param args */ public static void main(string[] args) { try { string strdatestart = "2006-10-1"; string strdateend = "2006-10-14"; simpledateformat sdf = new simpledateformat("yyyy-mm-dd"); date date_start = sdf.parse(strdatestart); date date_end = sdf.parse(strdateend); datecal app = new datecal(); calendar cal_start = calendar.getinstance(); calendar cal_end = calendar.getinstance(); cal_start.settime(date_start); cal_end.settime(date_end); system.out.println("星期-->" + app.getchineseweek(cal_start) + " 日期-->" + cal_start.get(calendar.year) + "-" + (cal_start.get(calendar.month) + 1) + "-" + cal_start.get(calendar.day_of_month)); system.out.println("星期-->" + app.getchineseweek(cal_end) + " 日期-->" + cal_end.get(calendar.year) + "-" + (cal_end.get(calendar.month) + 1) + "-" + cal_end.get(calendar.day_of_month)); system.out.println("工作日为-->" + app.getworkingday(cal_start, cal_end)); system.out.println("休息日-->"+app.getholidays(cal_start, cal_end)); } catch (exception e) { // todo: handle exception } } public int getdaysbetween(java.util.calendar d1, java.util.calendar d2) { if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end java.util.calendar swap = d1; d1 = d2; d2 = swap; } int days = d2.get(java.util.calendar.day_of_year) - d1.get(java.util.calendar.day_of_year); int y2 = d2.get(java.util.calendar.year); if (d1.get(java.util.calendar.year) != y2) { d1 = (java.util.calendar) d1.clone(); do { days += d1.getactualmaximum(java.util.calendar.day_of_year); d1.add(java.util.calendar.year, 1); } while (d1.get(java.util.calendar.year) != y2); } return days; } /** * 计算2个日期之间的相隔天数 * @param d1 * @param d2 * @return */ public int getworkingday(java.util.calendar d1, java.util.calendar d2) { int result = -1; if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end java.util.calendar swap = d1; d1 = d2; d2 = swap; } int betweendays = getdaysbetween(d1, d2); int charge_date = 0; 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) {// 开始日期为星期六和星期日时偏移量为0 charge_start_date = stmp - 1; } if (etmp != 0 && etmp != 6) {// 结束日期为星期六和星期日时偏移量为0 charge_end_date = etmp - 1; } // } result = (getdaysbetween(this.getnextmonday(d1), this.getnextmonday(d2)) / 7) * 5 + charge_start_date - charge_end_date; //system.out.println("charge_start_date>" + charge_start_date); //system.out.println("charge_end_date>" + charge_end_date); //system.out.println("between day is-->" + betweendays); return result; } public string getchineseweek(calendar date) { final string daynames[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; int dayofweek = date.get(calendar.day_of_week); // system.out.println(daynames[dayofweek - 1]); return daynames[dayofweek - 1]; } /** * 获得日期的下一个星期一的日期 * * @param date * @return */ public 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; } /** * * @param d1 * @param d2 * @return */ public int getholidays(calendar d1,calendar d2){ return this.getdaysbetween(d1, d2)-this.getworkingday(d1, d2); } } |