java计算几天后的日期,java计算日期 多少天后
00-1010计算两个时间段的工作天数。有两种方法可以解决这个问题。实现的一般原理是计算两个日期之间的周末天数。
00-1010一般在OA系统中,会计算员工这段时间的工作日。
00-1010首先调用第三方服务接口计算;第二,写系统里的代码来计算。一个的好处是年假可以直接分两个时间段计算,不用维护。但缺点是有些公司可能和法定节假日期间不一样,所以此时无法计算。另外,如果内部使用OA系统,可能部署在内网,所以无法访问第三方接口。
第二,你需要维护自己的假期和计算。但它有效地解决了第一种方法的缺陷;
根据模式2的特点,引入了一个工具类来计算两个时间段的工作日:
导入Java . text . parse exception;导入Java . util . *;导入org . Apache.commons . lang 3 . time . dateformatutils;导入org . Apache.commons . lang 3 . time . dateutils;Class calc工作日{/* * *法定节假日列表* * @ return */public静态liststring get holidays(){ liststring holidays=new ArrayList();//元旦假期. add( 2021-01-01 );holidays . add( 2021-01-02 );holidays . add( 2021-01-03 );//春节假期. add( 2021年2月11日);holidays . add( 2021-02-12 );holidays . add( 2021-02-13 );holidays . add( 2021-02-14 );holidays . add( 2021-02-15 );holidays . add( 2021-02-16 );holidays . add( 2021-02-17 );//清明节假期. add( 2021-04-03 );holidays . add( 2021-04-04 );holidays . add( 2021-04-05 );//劳动节假期. add( 2021-05-01 );holidays . add( 2021-05-02 );holidays . add( 2021-05-03 );holidays . add( 2021-05-04 );holidays . add( 2021-05-05 );//端午假期. add( 2021-06-12 );holidays . add( 2021-06-13 );holidays . add( 2021-06-14 );//中秋假期. add( 2021-09-19 );holidays . add( 2021-09-20 );holidays . add( 2021-09-21 );//国庆假期. add( 2021年10月01日);holidays . add( 2021-10-02 );holidays . add( 2021-10-03 );holidays . add( 2021-10-04 );holidays . add( 2021-10-05 );holidays . add( 2021-10-06 );holidays . add( 2021-10-07 );返程假期;}/* * *需要上班的周末列表* * @ return */public静态liststring getneedworkweeks(){ liststring work weeks=new ArrayList();work weekends . add( 2021-02-07 );work weekends . add( 2021-02-20 );
workWeekends.add("2021-04-25"); workWeekends.add("2021-05-08"); workWeekends.add("2021-09-18"); workWeekends.add("2021-09-26"); workWeekends.add("2021-10-09"); return workWeekends; } /** * 计算两个日期之间的工作日天数,包含起始日期,包含终止日期 * * @param start 计算开始时间 必须传yyyy-MM-dd的格式 * @param stop计算结束时间 必须传yyyy-MM-dd的格式 * @return * @throws ParseException */ public static int calc(String start, String stop) throws ParseException { //获取今年的法定节假日期 List<String> workWeekends = getNeedWorkWeekends(); //获取今年需要补班的日期 List<String> holidays = getHolidayList(); String pattern = "yyyy-MM-dd"; Date begin = DateUtils.parseDate(start, pattern); Date endTime = DateUtils.parseDate(stop, pattern); Calendar cEnd = new GregorianCalendar(); cEnd.setTime(endTime); // 计算时算入stop当天 cEnd.add(Calendar.DATE,1); Date end=cEnd.getTime(); // Calendar c = Calendar.getInstance(); c.setTime(begin); int count = 0; String ymd = null; while (c.getTime().before(end)) { ymd = DateFormatUtils.format(c.getTime(), pattern); // 不是法定节假日 if (!holidays.contains(ymd)) { // 不是休息日 if (workWeekends.contains(ymd)) { count++; } else { // 非周末 if (c.get(Calendar.DAY_OF_WEEK) != 1 && c.get(Calendar.DAY_OF_WEEK) != 7) { count++; } } } c.add(Calendar.DATE, 1); } return count; }}
实现的大概原理就是
循环将该时间段的法定节假日排除 加上需要补班的日期得出最后该时间段间总共有多少个需要工作的天数。
以上两部分的日期可维护在数据库中,现测试方法目前放到代码中了。
可以根据公司的制度进行调整需要工作的日期,比如在正常的工作日是休息可将该日期加到法定节假日中,在正常的休息日工作的话可将该日期添加到补班日期中。
计算两个日期之间的周末天数
import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date; /** * 计算两个日期之间的周末天数 * @author yan * */public class WeekEnd {public static void main(String[] args) throws ParseException { // 设置传入的时间格式 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 指定一个日期 Date date1 = dateFormat.parse("2016-11-12 13:24:16"); Date date2 = dateFormat.parse("2016-11-20 13:24:16"); //第三个三处代表是否 去除 双休日 System.out.println(computeHolidays(date2,date1));}public static int computeHolidays(Date t1,Date t2) throws ParseException{//初始化第一个日期Calendar cal1 = Calendar.getInstance();//初始化第二个日期,这里的天数可以随便的设置Calendar cal2 = Calendar.getInstance(); // 设置传入的时间格式 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 指定一个日期 Date date1 = dateFormat.parse(dateFormat.format(t1)); Date date2 = dateFormat.parse(dateFormat.format(t2));// 对 calendar 设置为 date 所定的日期 cal1.setTime(date1); cal2.setTime(date2); int holidays = 0;//确定一个 大日期if(cal1.compareTo(cal2) > 0){Calendar temp = cal1;cal1 = cal2;cal2 = temp;temp = null;}while(cal1.compareTo(cal2)<=0){if(cal1.get(Calendar.DAY_OF_WEEK)==1cal1.get(Calendar.DAY_OF_WEEK)==7){holidays++;System.out.println("周末:"+new SimpleDateFormat("yyyy-MM-dd").format(cal1.getTime()));}cal1.add(Calendar.DAY_OF_YEAR,1);}return holidays;}}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。