一般的人事考勤记录中会统计具体的上班时间,请假时间天数,小编今天制作过程中通过本人思考得到具体的时间。
统计过程中通过改变具体的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;
}
}
本例子中加入了相对应的判断周末和假期的方法,可以单独用来作为模块使用;
该类中的方法可以用来定时触发一个业务,通过校验具体的有效时间触发。