统计出假期和周末以外的工作日天数

xiaoxiao2025-11-09  36

一般的人事考勤记录中会统计具体的上班时间,请假时间天数,小编今天制作过程中通过本人思考得到具体的时间。

统计过程中通过改变具体的day和时间calendar就可以得到具体的时间

1 .判断是否为周六周天

//判断周六、周天 public static boolean isWeekenday(Calendar calendar) { int week = calendar.get(Calendar.DAY_OF_WEEK) - 1; if (week == 0 || week == 6) { System.err.println("周末星期" + week + "日期: " + new SimpleDateFormat("yyyyMMdd").format(calendar.getTime())); return true; } return false; }

2. 判断是否为节假日

//判断是否为节假日 public static boolean isHoliday(Calendar calendar) { String dateStr = new SimpleDateFormat("yyyyMMdd").format(calendar.getTime()); String[] daylist = {"20181023","20181025","20181027"}; for (String day : daylist) { if (dateStr.equals(day)) { System.err.println("节假日" + day); return true; } } return false; }

3. 通过递归计算天数并返回有效天数

//周末、法定假期或者特殊日期为false,其他工作日为true public static int calDay(Calendar calendar, int days) { //下一天 calendar.add(Calendar.DAY_OF_YEAR, 1); //非工作日 if (isWeekenday(calendar) || isHoliday(calendar)) { return calDay(calendar, days); } if (days == 5) { taskTime = calendar; System.out.println("发送短信日期时间" + new SimpleDateFormat("yyyyMMdd").format(calendar.getTime())); System.out.println("发送短信"); System.out.println("将流程中状态置为否决状态"); return days; } else { days++; System.out.println("有效日期: " + new SimpleDateFormat("yyyyMMdd").format(calendar.getTime())); return calDay(calendar, days); } }

4. 计算天数的测试代码

public static void main(String[] args) throws ParseException { int days = 0; String sdate = "20181024"; SimpleDateFormat sdf= new SimpleDateFormat("yyyyMMdd"); Date date =sdf.parse(sdate); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); days = calDay(calendar, days); if(days == 5) { sendMsg(); } System.out.println("计算完成业务日期" + sdf.format(taskTime.getTime())); }

5. 通过此方法可以计算具体实际的工作天数,或者在业务中除去具体的假期和周目所需的天数,也可以得到具体的时间;

package com.tfrunning.workday; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class CalDay { private static Calendar taskTime; public static void main(String[] args) throws ParseException { int days = 0; String sdate = "20181024"; SimpleDateFormat sdf= new SimpleDateFormat("yyyyMMdd"); Date date =sdf.parse(sdate); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); days = calDay(calendar, days); if(days == 5) { sendMsg(); } System.out.println("计算完成业务日期" + sdf.format(taskTime.getTime())); } //周末、法定假期或者特殊日期为false,其他工作日为true public static int calDay(Calendar calendar, int days) { //下一天 calendar.add(Calendar.DAY_OF_YEAR, 1); //非工作日 if (isWeekenday(calendar) || isHoliday(calendar)) { return calDay(calendar, days); } if (days == 5) { taskTime = calendar; System.out.println("发送短信日期时间" + new SimpleDateFormat("yyyyMMdd").format(calendar.getTime())); System.out.println("发送短信"); System.out.println("将流程中状态置为否决状态"); return days; } else { days++; System.out.println("有效日期: " + new SimpleDateFormat("yyyyMMdd").format(calendar.getTime())); return calDay(calendar, days); } } public static void sendMsg() { System.out.println("发送短信"); } //判断周六、周天 public static boolean isWeekenday(Calendar calendar) { int week = calendar.get(Calendar.DAY_OF_WEEK) - 1; if (week == 0 || week == 6) { System.err.println("周末星期" + week + "日期: " + new SimpleDateFormat("yyyyMMdd").format(calendar.getTime())); return true; } return false; } //判断是否为节假日 public static boolean isHoliday(Calendar calendar) { String dateStr = new SimpleDateFormat("yyyyMMdd").format(calendar.getTime()); //可以先把节假日和休假时间存入数据库里面,查询出对应的时间后以当前传入的时间比较 String[] daylist = {"20181023","20181025","20181027"}; for (String day : daylist) { if (dateStr.equals(day)) { System.err.println("节假日" + day); return true; } } return false; } }

本例子中加入了相对应的判断周末和假期的方法,可以单独用来作为模块使用;

该类中的方法可以用来定时触发一个业务,通过校验具体的有效时间触发。

转载请注明原文地址: https://www.6miu.com/read-5039346.html

最新回复(0)