首先选择的日期要判断是不是节假日;
这里是写了工具类获取全年的日期信息。
dateUtils工具类 某年第一天可以直接拼接 yyyy-01-01 获取节假日方法:
public class DateUtils {
public static final String goWeekURL= "http://api.goseek.cn/Tools/holiday?date=";//从公认网站上获取 节假日信息
//String转时间
public static Date parseDate(String dateValue){
SimpleDateFormat formatter = new SimpleDateFormat(date_format);
try{
Date date = formatter.parse(dateValue);
return date;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
public static String getCurrentDateTime(String format){
Date date=new Date();
DateFormat dateFormat = new SimpleDateFormat(format);
String time = dateFormat.format(date);
return time;
}
//获取当前时间
public static Timestamp getTimestamp(){
return new Timestamp(System.currentTimeMillis());
}
/**
* @Title: getFirstDayOfYear
* @Description: 获取某年的第一天
* @param year 年份
* @param pattern 返回值的格式 yyyy-MM-dd
* @throws ParseException
* @return String
* @date createTime:2018年3月26日上午11:24:54
*/
public static String getFirstDayOfYear(String year,String pattern) throws ParseException{
SimpleDateFormat df=new SimpleDateFormat(pattern);
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, Integer.valueOf(year));
Date currYearFirst = calendar.getTime();
return df.format(currYearFirst);
}
/**
* @Title: compareDate
* @Description: 比较两个时间字符串大小
* @return boolean
* @date 2017年8月18日下午4:26:40
*/
public static boolean compareDate(String date,String date1,String pattern) {
boolean flag = true;
SimpleDateFormat df = new SimpleDateFormat(pattern);
try {
Date dt = df.parse(date);
Date dt1= df.parse(date1);
if (dt.getTime() > dt1.getTime()) {
return flag=false;
} else if (dt.getTime() < dt1.getTime()) {
return flag=true;
}
} catch (Exception exception) {
exception.printStackTrace();
}
return flag;
}
/**
* @Title: timestampToString
* @Description: Timestamp转String
* @return String
* @date 2017年8月31日下午2:12:27
*/
public static String timestampToString(Timestamp timestamp,String pattern){
SimpleDateFormat df = new SimpleDateFormat(pattern);
return df.format(timestamp);
}
/**
* @Title: stringToTimestamp
* @Description: String转Timestamp
* @return Timestamp
* @date 2017年8月31日下午2:21:24
*/
public static Timestamp stringToTimestamp(String time){
return Timestamp.valueOf(time);
}
/**
* @Title: getFirstDayOfYear
* @Description: 获取某年的第一天
* @param year 年份
* @param pattern 返回值的格式 yyyy-MM-dd
* @throws ParseException
* @return String
* @date createTime:2018年3月26日上午11:24:54
*/
public static String getFirstDayOfYear(String year,String pattern) throws ParseException{
SimpleDateFormat df=new SimpleDateFormat(pattern);
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, Integer.valueOf(year));
Date currYearFirst = calendar.getTime();
return df.format(currYearFirst);
}
/**
* @Title: getLastDayOfYear
* @Description: 获取某年的最后一天
* @param year 年份
* @param pattern 返回值的格式 yyyy-MM-dd
* @throws ParseException
* @return String
* @date createTime:2018年3月26日上午11:26:05
*/
public static String getLastDayOfYear(String year,String pattern) throws ParseException{
SimpleDateFormat df=new SimpleDateFormat(pattern);
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, Integer.valueOf(year));
calendar.roll(Calendar.DAY_OF_YEAR, -1);
Date currYearLast = calendar.getTime();
return df.format(currYearLast);
}
/**
* @Title: getFirstDayOfMonth
* @Description: 获取某月的第一天
* @param date
* @param pattern
* @throws ParseException
* @return String
* @date createTime:2018年3月17日上午11:35:09
*/
public static String getFirstDayOfMonth(String date,String pattern) throws ParseException{
SimpleDateFormat df=new SimpleDateFormat(pattern);
Calendar calendar = Calendar.getInstance();
calendar.setTime(df.parse(date));
calendar.set(Calendar.DAY_OF_MONTH, 1);
Date firstDayOfMonth = calendar.getTime();
return df.format(firstDayOfMonth);
}
/**
* @Title: getlastDayOfMonth
* @Description: 获取某月的最后一天
* @param date
* @param pattern
* @throws ParseException
* @return String
* @date createTime:2018年3月17日上午11:36:51
*/
public static String getLastDayOfMonth(String date,String pattern) throws ParseException{
SimpleDateFormat df=new SimpleDateFormat(pattern);
Calendar calendar = Calendar.getInstance();
calendar.setTime(df.parse(date));
calendar.set(Calendar.DAY_OF_MONTH, 0);
Date lastDayOfMonth = calendar.getTime();
return df.format(lastDayOfMonth);
}
/**
* @Title: getWeek
* @Description: 判断日期是本年份的第几周
* @param date yyyy-MM-dd
* @return int
* @date createTime:2018年3月26日下午2:04:01
*/
public static int getWeek(String date) {
Calendar cal = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
cal.setTime(format.parse(date));
} catch (ParseException e) {
e.printStackTrace();
}
return cal.get(Calendar.WEEK_OF_YEAR);
}
/**
* @Title: getQuarter
* @Description: 获取日期所在的季度
* @param date
* @return int
* @date createTime:2018年3月26日下午2:27:27
*/
public static int getQuarter(String date) {
Calendar cal = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
cal.setTime(format.parse(date));
} catch (ParseException e) {
e.printStackTrace();
}
int month = cal.get(Calendar.MONTH) + 1;
int Quarter=0;
if(month>=1 && month<=3){
Quarter = 1;
}else if(month>=4 && month<=6){
Quarter = 2;
}else if(month>=7 && month<=9){
Quarter = 3;
}else if(month>=10 && month<=12){
Quarter = 4;
}
return Quarter;
}
/**
* @Title: dateSplit
* @Description: 获取两个日期范围内的所有日期
* @param startDate 开始时间
* @param endDate 结束时间
* @throws Exception
* @return List
* @date createTime:2018年3月23日下午4:40:37
*/
public static List dateSplit(String startDate, String endDate,String pattern)throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
Date start = sdf.parse(sdf.format(sdf1.parse(startDate)));
Date end = sdf.parse(sdf.format(sdf1.parse(endDate)));
if (!start.before(end))
throw new Exception("开始时间应该在结束时间之后");
Long spi = end.getTime() - start.getTime();
Long step = spi / (24 * 60 * 60 * 1000);// 相隔天数
List dateList = new ArrayList();
dateList.add(end);
for (int i = 1; i <= step; i++) {
dateList.add(new Date(dateList.get(i - 1).getTime()
- (24 * 60 * 60 * 1000)));// 比上一天减一
}
return dateList;
}
/**
* @Title: getDayOfWeek
* @Description: 获取当前日期是周几
* @param date
* @return int 0~6 对应 周日-周六
* @date createTime:2018年3月23日下午4:59:40
*/
public static int getDayOfWeek(String date){
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance(); // 获得一个日历
Date datet = null;
try {
datet = f.parse(date);
cal.setTime(datet);
} catch (ParseException e) {
e.printStackTrace();
}
int w = cal.get(Calendar.DAY_OF_WEEK) - 1; // 指示一个星期中的某天。
if(w<0)w=0;
return w;
}
/**
* @Title: conpareYear
* @Description: 获取两个时间相差多少年
* @param @param start
* @param @param end
* @param @throws ParseException
* @return double
* @date createTime:2018年4月4日上午11:54:06
*/
public static int compareYear(String start,String end) throws ParseException{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar from = Calendar.getInstance();
from.setTime(sdf.parse(start));
Calendar to = Calendar.getInstance();
to.setTime(sdf.parse(end));
int fromYear = from.get(Calendar.YEAR);
int toYear = to.get(Calendar.YEAR);
int d_value=toYear-fromYear;
return d_value;
}
/**
* @Title: getYearOfDate
* @Description: 获取日期的年份
* @param date
* @return int
* @date createTime:2018年3月26日下午4:24:52
*/
public static int getYearOfDate(String date){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance(); // 获得一个日历
cal.clear();
try {
cal.setTime(sdf.parse(date));
} catch (ParseException e) {
e.printStackTrace();
}
return cal.get(Calendar.YEAR);
}
/**
* @Title: getMonthOfDate
* @Description: 获取日期的月份
* @param date yyyy-MM-dd
* @return int
* @date createTime:2018年3月26日下午4:03:53
*/
public static int getMonthOfDate(String date){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance(); // 获得一个日历
cal.clear();
try {
cal.setTime(sdf.parse(date));
} catch (ParseException e) {
e.printStackTrace();
}
return cal.get(Calendar.MONTH) + 1;
}
/**
* @Title: getDayOfDate
* @Description: 获取日期的天数
* @param date
* @return int
* @date createTime:2018年3月26日下午4:29:00
*/
public static int getDayOfDate(String date){
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.clear();
try {
cal.setTime(df.parse(date));
} catch (ParseException e) {
e.printStackTrace();
}
return cal.get(Calendar.DATE);
}
/**
* @Title: getHoliday
* @Description: 获取工作日、节假日、休息日
* @param date 类型yyyy-MM-dd (将自动转为yyyyMMdd 否则会返回数据错误)
* @throws ParseException
* @return String 工作日对应结果为 0, 休息日对应结果为 1, 节假日对应的结果为 2, 网站失效-1, 数据格式改变-2
* @date createTime:2018年3月23日下午4:10:13
*/
public static String getHoliday(String date) throws ParseException{
System.out.println(date);
SimpleDateFormat df= new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat df1= new SimpleDateFormat("yyyy-MM-dd");
String param = df.format(df1.parse(date));
StringBuffer resultBuffer = null;
BufferedReader br = null;
URL url;
try {
url = new URL(goWeekURL+param);
URLConnection con;
try {
//connection = (HttpURLConnection) urlTime.openConnection();//打开连接
con = url.openConnection();
// 设置请求属性
con.setRequestProperty("accept", "*/*");
con.setRequestProperty("connection", "Keep-Alive");
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
con.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立连接
con.connect();
resultBuffer = new StringBuffer();
br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
String temp;
while ((temp = br.readLine()) != null) {
resultBuffer.append(temp);
}
if(resultBuffer.indexOf("data")!=-1){
return resultBuffer.substring(resultBuffer.length()-2,resultBuffer.length()-1);
}else{
return "-2";
}
} catch (IOException e) {
return "-1";
}
} catch (MalformedURLException e) {
return "-1";
}
}
/**
* @Title: TimeOperation
* @Description: 时间+-运算
* @param o(对象),type(时间类型:year,month...),format(时间格式:yyyy-MM-...),num(运算天数1,-1),resul_type(返回类型(java.util.Date)全类名)
* @return Object
* @date 2018年5月5日
*/
public static Object TimeOperation(Object o, String type, String format, int num, String result_type) {
String[] oname = o.getClass().getName().split("\\.");
SimpleDateFormat df = new SimpleDateFormat(format);
Calendar calendar = new GregorianCalendar();
if (oname[oname.length - 1].equalsIgnoreCase("String")) {
String time = o.toString();
Date date = null;
try {
date = df.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
calendar.setTime(date);
return OperationResult(df, calendar, type, format, num, result_type);
} else if (oname[oname.length - 1].equalsIgnoreCase("Date")) {
if (oname[oname.length - 2].equalsIgnoreCase("util")) {
calendar.setTime((Date) o);
} else {
calendar.setTime(new Date(((java.sql.Date) o).getTime()));
}
return OperationResult(df, calendar, type, format, num, result_type);
} else if (oname[oname.length - 1].equalsIgnoreCase("TimeStamp")) {
calendar.setTime((Timestamp) o);
return OperationResult(df, calendar, type, format, num, result_type);
}
return null;
}
/**
* @Title: OperationResult
* @Description:返回时间+-运算结果
* @return Object
* @date 2018年5月5日
*/
public static Object OperationResult(SimpleDateFormat df, Calendar calendar, String type, String format, int num, String result_type) {
// 判断运算时间类型 年月日
if (type.equalsIgnoreCase("Year")) {
calendar.add(Calendar.YEAR, num);
} else if (type.equalsIgnoreCase("Month")) {
calendar.add(Calendar.MONDAY, num);
} else if (type.equalsIgnoreCase("Day")) {
calendar.add(Calendar.DATE, num);
} else if (type.equalsIgnoreCase("Hour")) {
calendar.add(Calendar.HOUR, num);
} else if (type.equalsIgnoreCase("Minute")) {
calendar.add(Calendar.MINUTE, num);
} else if (type.equalsIgnoreCase("Second")) {
calendar.add(Calendar.SECOND, num);
}
// 输出结果
String rt[] = result_type.split("\\.");
if (rt[2].equalsIgnoreCase("String")) {
return df.format(calendar.getTime());
} else if (rt[2].equalsIgnoreCase("Date")) {
if (rt[1].equalsIgnoreCase("util")) {
return calendar.getTime();
} else {
return new java.sql.Date(calendar.getTime().getTime());
}
} else if (rt[2].equalsIgnoreCase("TimeStamp")) {
return new Timestamp(calendar.getTimeInMillis());
}
return null;
}
}
ToolsUtils 工具类
package com.ys.utils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import org.apache.poi.ss.formula.functions.T;
import com.ys.entity.Job;
import com.ys.entity.User;
import io.netty.util.internal.EmptyArrays;
/**
*@Title ToolsUtils.java
*@description:
*@time 创建时间:2018年2月2日 下午2:40:11
**/
public class ToolsUtils {
static String jobIds="";
static String jobIds1="";
private ToolsUtils() {
System.err.println("***********************");
}
/**
* @Title: distinctArray
* @Description: String[] 数字数组去重并转为Integer[] 适用于int数据
* @param str
* @return Integer[]
* @date createTime:2018年2月2日下午2:52:00
*/
public static Integer[] distinctArray(String[] str){
Integer[] arr = new Integer[str.length];
for (int i = 0; i < arr.length; i++) {
arr[i]=Integer.parseInt(str[i]);
}
List list = new ArrayList();
for (int i=0; i list = new ArrayList();
for (int i=0; iarr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
/**
* @Title: arrayToList
* @Description: String[]数组转list集合
* @param str
* @return List
* @date createTime:2018年2月2日下午2:55:03
*/
public static List arrayToList(String[] str){
return Arrays.asList(str);
}
/**
* @Title: arrayToList
* @Description: Integer[]数组转list集合
* @param str
* @return List
* @date createTime:2018年2月2日下午2:56:48
*/
public static List arrayToList(Integer[] str){
return Arrays.asList(str);
}
/**
* @Title: listToStringArray
* @Description: list集合转String[]数组
* @param list
* @return String[]
* @date createTime:2018年2月2日下午2:59:53
*/
public static String[] listToStringArray(List list){
return list.toArray(new String[list.size()]);
}
/**
* @Title: listToIntegerArray
* @Description: list集合转Integer[]数组
* @param list
* @return Integer[]
* @date createTime:2018年2月2日下午3:00:19
*/
public static Integer[] listToIntegerArray(List list){
return list.toArray(new Integer[list.size()]);
}
/**
* @Title: getUserIdForList
* @Description: 获取用户表集合中的id拼接为字符串
* @param list
* @return String
* @date createTime:2018年2月7日下午2:31:27
*/
/*public static String getUserIdForList(List list){
String strId="";
if(list.size()>0){
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getUser_id()!=0){
strId+=list.get(i).getUser_id()+",";
if(list.get(i).getChildren().size()>0){
getUserIdForList(list.get(i).getChildren());
}
}else{
continue;
}
}
}
return strId;
}*/
public static void emptyString(){
jobIds="";
}
public static String getJobIdForList(List list){
if(list.size()>0){
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getJob_id() !=0 ){
jobIds+=list.get(i).getJob_id()+",";
if(list.get(i).getChildren().size()>0){
getJobIdForList(list.get(i).getChildren());
}
}else{
continue;
}
}
}
return jobIds;
}
/**
* @Title: getIndexForArray
* @Description: 判断string数组中是否存在某个值 不存在返回-1 存在返回下标
* @param @param arr
* @param @param value
* @param @return
* @return int
* @date createTime:2018年4月3日下午4:24:20
*/
public static int getIndexForArray(String[] arr,String value){
int index=-1;
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
System.out.println((arr[i]==value)+"---"+(arr[i]==""+value+""));
if(arr[i].equals(value)){
index = i;
break;
}
}
return index;
}
/**
* @Title: getIndexForArray
* @Description: 判断Integer数组中是否存在某个值 不存在返回-1 存在返回下标
* @param @param arr
* @param @param value
* @param @return
* @return int
* @date createTime:2018年4月3日下午4:25:44
*/
public static int getIndexForArray(Integer[] arr,Integer value){
int index=0;
for (int i = 0; i < arr.length; i++) {
if(arr[i] == value){
index = i;
break;
}
}
return index;
}
/**
* @Title: getRandomString
* @Description: 随机生成字符串
* @param @param length 字符串长度
* @return String
* @date createTime:2018年4月9日下午1:45:52
*/
public static String getRandomString(int length){
//产生随机数
Random random=new Random();
StringBuffer sb=new StringBuffer();
//循环length次
for(int i=0; i
获取全年日期导入数据库表
HolidayUtils.java
package com.ys.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import com.ys.entity.YearUtil;
import com.ys.service.YearUtilService;
/**
*@Title HolidayUtils.java
*@description: 获取全年日期
*@author
*@time 创建时间:2018年3月26日 上午11:17:16
**/
@Component
public class HolidayUtils {
@Autowired
private YearUtilService yuservice;
private static HolidayUtils holidayUtils;
@PostConstruct
public void init(){
holidayUtils=this;
holidayUtils.yuservice=this.yuservice;
}
/**
* @Title: getAllDateOfYear
* @Description: 获取全年的日期假日信息导入到数据库表
* @param year
* @throws ParseException
* @return Map
* @author lihaichao
* @date createTime:2018年3月27日下午4:33:16
*/
@Transactional
public static Map getAllDateOfYear(String year) throws ParseException{
Map map=new HashMap<>();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat df1=new SimpleDateFormat("yyyy年MM月dd日");
String start=DateUtils.getFirstDayOfYear(year, "yyyyMMdd");
String end=DateUtils.getLastDayOfYear(year, "yyyyMMdd");
List list=new ArrayList<>();
try {
list = DateUtils.dateSplit(start, end,"yyyyMMdd");
} catch (Exception e) {
map.put("status", "error");
map.put("msg","获取年份日期数据错误!");
e.printStackTrace();
return map;
}
List yuList=new ArrayList<>();
for (int i = (list.size()-1); i >= 0 ; i--) {
YearUtil yu=new YearUtil();
String param=df.format(list.get(i));
String param1=df1.format(list.get(i));
String status=DateUtils.getHoliday(param);
if(status=="-1"){
try {
map.put("status", "error");
map.put("msg","获取节假日网站失效!");
throw new Exception("获取节假日网站失效!");
} catch (Exception e) {
e.printStackTrace();
return map;
}
}else if(status=="-2"){
try {
map.put("status", "error");
map.put("msg","节假日返回数据的格式改变!");
throw new Exception("节假日返回数据的格式改变!");
} catch (Exception e) {
e.printStackTrace();
return map;
}
}
yu.setDay_format(param);
yu.setDay_format2(param1);
yu.setYear(DateUtils.getYearOfDate(param));
yu.setMonth(DateUtils.getMonthOfDate(param));
yu.setDay(DateUtils.getDayOfDate(param));
yu.setWeek_id(DateUtils.getWeek(param));
yu.setQuarter_id(DateUtils.getQuarter(param));
yu.setHoliday_status(status);
yuList.add(yu);
}
if(yuList.size() == list.size()){
int result=holidayUtils.yuservice.addYearUtil(yuList);
if(result>0){
map.put("status", "ok");
map.put("msg","执行成功");
}else{
map.put("status", "error");
map.put("msg","执行失败");
}
}else{
try {
map.put("status", "error");
map.put("msg","数据条数不匹配!");
throw new Exception("数据条数不匹配!");
} catch (Exception e) {
e.printStackTrace();
return map;
}
}
return map;
}
}
实体类 YearUtil.java
public class YearUtil {
private int id;//id
private String day_format;//yyyy-MM-dd
private String day_format2;//yyyy年MM月dd日
private int year;//year
private int month;//month
private int day;//day
private int week_id;//第几周
private int quarter_id;//第几季度
private String holiday_status;//工作日对应结果为 0, 休息日对应结果为 1, 节假日对应的结果为 2, 网站失效-1, 数据格式改变-2
private int status;//status
private String remark;//remark
}
YearUtilMapper.java
package com.ys.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import com.ys.entity.YearUtil;
/**
*@Title YearUtilMapper.java
*@description: 年份日期
*@time 创建时间:2018年3月26日 下午2:56:03
**/
@Repository
public interface YearUtilMapper {
/**
* @Title: queryAllYearUtil
* @Description: 查询所有日期 模糊查询分页
* @param year 年
* @param yearMonth 年月
* @param page
* @param limit
* @return List
* @date createTime:2018年3月27日上午11:36:04
*/
List queryAllYearUtil(@Param("year")int year,@Param("yearMonth")String yearMonth,@Param("status")int status,@Param("page")int page,@Param("limit")int limit);
/**
* @Title: addYearUtil
* @Description: 添加本年份数据
* @param yu
* @return int
* @date createTime:2018年3月26日下午2:59:18
*/
int addYearUtil(List list);
/**
* @Title: queryYearUtilByDayFormat
* @Description: 根据day_format格式yyyy-MM-dd 查询该天数的数据
* @param day_format
* @return YearUtil
* @date createTime:2018年3月26日下午2:57:56
*/
List queryYearUtilByDayFormat(String day_format);
/**
* @Title: queryYearUtilByYear
* @Description: 根据年份查询数据
* @param year
* @return List
* @date createTime:2018年3月27日上午11:22:35
*/
List queryYearUtilByYear(int year);
/**
* @Title: queryYearUtilByDayFormat2
* @Description: 根据day_format2格式yyyy年MM月dd日 查询该天数的数据
* @param day_format2
* @return YearUtil
* @date createTime:2018年3月26日下午2:58:43
*/
List queryYearUtilByDayFormat2(String day_format2);
}
YearUtilMapper.xml
insert into sys_year_util (day_format,day_format2,year,month,day,week_id,quarter_id,holiday_status,status,remark)
values
(#{list.day_format},#{list.day_format2},#{list.year},#{list.month},#{list.day},#{list.week_id},#{list.quarter_id},
#{list.holiday_status},#{list.status},#{list.remark})
YearUtilService.java
package com.ys.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ys.dao.YearUtilMapper;
import com.ys.entity.YearUtil;
/**
*@Title YearUtilService.java
*@description: 年份日期
*@time 创建时间:2018年3月26日 下午4:36:20
**/
@Service
public class YearUtilService {
@Autowired
private YearUtilMapper mapper;
/**
* @Title: queryAllYearUtil
* @Description: 查询所有日期 模糊查询分页
* @param year
* @param yearMonth
* @param page
* @param limit
* @return List
* @date createTime:2018年3月27日上午11:47:34
*/
public List queryAllYearUtil(int year,String yearMonth,int status,int page,int limit){
return mapper.queryAllYearUtil(year, yearMonth,status, page, limit);
}
/**
* @Title: addYearUtil
* @Description: 添加本年份数据
* @param list
* @return int
* @date createTime:2018年3月27日上午11:47:41
*/
public int addYearUtil(List list){
return mapper.addYearUtil(list);
}
/**
* @Title: queryYearUtilByDayFormat
* @Description: 根据day_format格式yyyy-MM-dd 查询该天数的数据
* @param day_format
* @return List
* @date createTime:2018年3月27日上午11:49:29
*/
public List queryYearUtilByDayFormat(String day_format){
return mapper.queryYearUtilByDayFormat(day_format);
}
/**
* @Title: queryYearUtilByDayFormat2
* @Description: 根据day_format2格式yyyy年MM月dd日 查询该天数的数据
* @param day_format2
* @return List
* @date createTime:2018年3月27日上午11:49:41
*/
public List queryYearUtilByDayFormat2(String day_format2){
return mapper.queryYearUtilByDayFormat2(day_format2);
}
/**
* @Title: queryYearUtilByYear
* @Description: 根据年份查询数据
* @param year
* @return List
* @date createTime:2018年3月27日上午11:50:16
*/
public List queryYearUtilByYear(int year){
return mapper.queryYearUtilByYear(year);
}
}
YearUtilController.java
package com.ys.controller;
import java.text.ParseException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ys.entity.YearUtil;
import com.ys.service.YearUtilService;
import com.ys.utils.HolidayUtils;
/**
*@Title YearUtilController.java
*@description:
*@time 创建时间:2018年3月27日 上午11:51:52
**/
@Controller
public class YearUtilController {
@Autowired
private YearUtilService service;
/**
* @Title: queryAllYearUtilListInput
* @Description: 跳转到全年日期列表页
* @return String
* @date createTime:2018年3月27日下午1:49:00
*/
@RequestMapping(value="queryAllYearUtilListInput")
public String queryAllYearUtilListInput(){
return "yearUtil/queryAllYearUtilList";
}
/**
* @Title: queryAllYearUtil
* @Description: 查询所有日期 模糊查询分页
* @param year
* @param yearMonth
* @param page
* @param limit
* @return Map
* @date createTime:2018年3月27日上午11:56:56
*/
@RequestMapping(value="queryAllYearUtil",method={RequestMethod.GET,RequestMethod.POST})
@ResponseBody
public Map queryAllYearUtil(int year,String yearMonth,int status,int page,int limit){
Map map=new HashMap<>();
List list = service.queryAllYearUtil(year, yearMonth,status,(page-1)*limit, limit);
List listAll = service.queryAllYearUtil(year, yearMonth,status, 0, 0);
if(list.size()>0){
map.put("code", 0);
map.put("msg","成功");
map.put("count",listAll.size());
}else{
map.put("code", 0);
map.put("msg","无数据");
map.put("count",0);
}
map.put("data",list);
return map;
}
/**
* @Title: addYearUtil
* @Description: 添加本年份数据
* @param list
* @return int
* @throws ParseException
* @date createTime:2018年3月27日下午1:46:14
*/
@RequestMapping(value="addYearUtilData",method={RequestMethod.GET,RequestMethod.POST})
@ResponseBody
@Transactional
public Map addYearUtilData(String year) throws ParseException{
return HolidayUtils.getAllDateOfYear(year);
}
/**
* @Title: queryYearUtilByDayFormat
* @Description: 根据day_format格式yyyy-MM-dd 查询该天数的数据
* @param day_format
* @return List
* @date createTime:2018年3月27日下午1:46:26
*/
@RequestMapping(value="queryYearUtilByDayFormat",method={RequestMethod.GET,RequestMethod.POST})
@ResponseBody
public List queryYearUtilByDayFormat(String day_format){
return service.queryYearUtilByDayFormat(day_format);
}
/**
* @Title: queryYearUtilByDayFormat2
* @Description: 根据day_format2格式yyyy年MM月dd日 查询该天数的数据
* @param day_format2
* @return List
* @date createTime:2018年3月27日下午1:46:41
*/
@RequestMapping(value="queryYearUtilByDayFormat2",method={RequestMethod.GET,RequestMethod.POST})
@ResponseBody
public List queryYearUtilByDayFormat2(String day_format2){
return service.queryYearUtilByDayFormat2(day_format2);
}
/**
* @Title: queryYearUtilByYear
* @Description: 根据年份查询数据
* @param year
* @return List
* @date createTime:2018年3月27日下午1:46:53
*/
@RequestMapping(value="queryYearUtilByYear",method={RequestMethod.GET,RequestMethod.POST})
@ResponseBody
public List queryYearUtilByYear(int year){
return service.queryYearUtilByYear(year);
}
}
考勤规则表AttendanceRule.java
public class AttendanceRule {
private int id;
private String work_days;//工作日
private int auto_holidays;//节假日自动排休 0开启 1关闭 默认开启
private int classes_id;//上班班次
private String must_days;//必须打卡的日期
private String not_must_days;//不必打卡的日期
private int status;//status
private String remark;//remark
private String classes;//班次名称
private Time amStart;//上午上班时间
private Time amEnd;//上午下班时间
private Time pmStart;//下午上班时间
private Time pmEnd;//下午下班时间
}
工作班次时间表 WorkTime.java
public class WorkTime {
private int id;//id
private String classes;//班次
private Time amStart;//上午上班时间
private Time amEnd;//上午下班时间
private Time pmStart;//下午上班时间
private Time pmEnd;//下午下班时间
private Timestamp createTime;//创建时间
}
service/controller 省略
请假时长统计方法
@RequestMapping(value="countLeaveDuration",method={RequestMethod.POST,RequestMethod.GET})
@ResponseBody
public Map countLeaveDuration(@Param("startTime")String startTime,@Param("endTime")String endTime) throws ParseException{
Map map=new HashMap<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
AttendanceRule ar=arservice.queryAttendanceRule();
int duration = 0;
int shangwu=0;
int xiawu=0;
int gongshi=0;
if(ar!=null){
String[] work_days=ar.getWork_days().split(",");//工作日 0-6 周日-周六
int auto_holidays=ar.getAuto_holidays();//是否排除节假日 0是 1否
String amStart=ar.getAmStart().toString();//上午上班时间
String amEnd=ar.getAmEnd().toString();//上午下班时间
String pmStart=ar.getPmStart().toString();//下午上班时间
String pmEnd=ar.getPmEnd().toString();//下午下班时间
String[] must=ar.getMust_days().split(",");//必须打卡的日期
String[] notMust=ar.getNot_must_days().split(",");//不必打卡的日期
//一天的工作时长
shangwu=(int) ((sdf.parse(startTime.substring(0,10)+" "+amEnd).getTime())-(sdf.parse(startTime.substring(0,10)+" "+amStart).getTime()));
xiawu=(int) ((sdf.parse(startTime.substring(0,10)+" "+pmEnd).getTime())-(sdf.parse(startTime.substring(0,10)+" "+pmStart).getTime()));
gongshi=shangwu+xiawu;
if(startTime.substring(0,10).equals(endTime.substring(0,10))){//同一天
if(auto_holidays==0){//节假日休班
//(必打卡 || (工作日 && 不是节假日)&& 不是不必打卡)
if((ToolsUtils.arrayToList(must).contains(startTime.substring(0,10)) || (ToolsUtils.arrayToList(work_days).contains(String.valueOf(DateUtils.getDayOfWeek(startTime.substring(0,10)))) && !(yuservice.queryYearUtilByDayFormat(startTime.substring(0, 10))).get(0).getHoliday_status().equals("2"))) && ToolsUtils.arrayToList(notMust).contains(startTime.substring(0,10))==false){
//开始时间在上午上班前 结束时间在上午下班之前
if(startTime.substring(11).compareTo(amStart)<=0 && endTime.substring(11).compareTo(amEnd)<=0 && endTime.substring(11).compareTo(amStart)>=0){
duration=(int) ((sdf.parse(endTime).getTime())-(sdf.parse(startTime.substring(0,10)+" "+amStart).getTime()));
//开始时间在上午上班前 && 结束时间在下午上班前
}else if(startTime.substring(11).compareTo(amStart)<=0 && endTime.substring(11).compareTo(amEnd)>0 && endTime.substring(11).compareTo(pmStart)<=0){
duration=(int) ((sdf.parse(endTime.substring(0,10)+" "+amEnd).getTime())-(sdf.parse(startTime.substring(0,10)+" "+amStart).getTime()));
//开始时间在上午上班前 && 结束时间在下午下班前
}else if(startTime.substring(11).compareTo(amStart)<=0 && endTime.substring(11).compareTo(pmStart)>0 && endTime.substring(11).compareTo(pmEnd)<=0){
duration= (int) ((sdf.parse(startTime.substring(0,10)+" "+amEnd).getTime())-(sdf.parse(startTime.substring(0,10)+" "+amStart).getTime())+(sdf.parse(endTime).getTime())-(sdf.parse(startTime.substring(0,10)+" "+pmStart).getTime()));
//开始时间在上午上班前 && 结束时间在下午下班之后
}else if(startTime.substring(11).compareTo(amStart)<=0 && endTime.substring(11).compareTo(pmEnd)>0){
duration=gongshi;
//开始时间在上午上班内 && 结束时间在上午下班前
}else if(startTime.substring(11).compareTo(amStart)>=0 && startTime.substring(11).compareTo(amEnd)<=0 && endTime.substring(11).compareTo(amEnd)<=0){
duration=(int) ((sdf.parse(endTime).getTime())-(sdf.parse(startTime).getTime()));
//开始时间在上午上班内 && 结束时间在中午
}else if(startTime.substring(11).compareTo(amStart)>=0 && startTime.substring(11).compareTo(amEnd)<=0 && endTime.substring(11).compareTo(amEnd)>0 && endTime.substring(11).compareTo(pmStart)<=0){
duration=(int) ((sdf.parse(startTime.substring(0,10)+" "+amEnd).getTime())-(sdf.parse(startTime).getTime()));
//开始时间在上午上班内 && 结束时间在下午
}else if(startTime.substring(11).compareTo(amStart)>=0 && startTime.substring(11).compareTo(amEnd)<=0 && endTime.substring(11).compareTo(pmStart)>0 && endTime.substring(11).compareTo(pmEnd)<=0){
duration=(int) ((sdf.parse(startTime.substring(0,10)+" "+amEnd).getTime())-(sdf.parse(startTime).getTime())+(sdf.parse(endTime).getTime())-(sdf.parse(endTime.substring(0,10)+" "+pmStart).getTime()));
//开始时间在上午上班内 && 结束时间在下午下班之后
}else if(startTime.substring(11).compareTo(amStart)>=0 && startTime.substring(11).compareTo(amEnd)<=0 && endTime.substring(11).compareTo(pmEnd)>0){
duration=(int) ((sdf.parse(startTime.substring(0,10)+" "+amEnd).getTime())-(sdf.parse(startTime).getTime())+(sdf.parse(endTime.substring(0,10)+" "+pmEnd).getTime())-(sdf.parse(endTime.substring(0,10)+" "+pmStart).getTime()));
//开始时间在中午 && 结束时间在下午
}else if(startTime.substring(11).compareTo(amEnd)>0 && startTime.substring(11).compareTo(pmStart)<=0 && endTime.substring(11).compareTo(pmStart)>0 && endTime.substring(11).compareTo(pmEnd)<=0){
duration= (int) ((sdf.parse(endTime).getTime())-(sdf.parse(endTime.substring(0,10)+" "+pmStart).getTime()));
//开始时间在中午 && 结束时间在下午下班之后
}else if(startTime.substring(11).compareTo(amEnd)>0 && startTime.substring(11).compareTo(pmStart)<=0 && endTime.substring(11).compareTo(pmEnd)>0){
duration=(int) ((sdf.parse(endTime.substring(0,10)+" "+pmEnd).getTime())-(sdf.parse(endTime.substring(0,10)+" "+pmStart).getTime()));
//开始时间在下午 && 结束时间在下午
}else if(startTime.substring(11).compareTo(pmStart)>0 && startTime.substring(11).compareTo(pmEnd)<=0 && endTime.substring(11).compareTo(pmEnd)<=0){
duration=(int) ((sdf.parse(endTime).getTime())-(sdf.parse(startTime).getTime()));
//开始时间在下午 && 结束时间在下午下班之后
}else if(startTime.substring(11).compareTo(pmStart)>0 && startTime.substring(11).compareTo(pmEnd)<=0 && endTime.substring(11).compareTo(pmEnd)>0){
duration=(int) ((sdf.parse(endTime.substring(0,10)+" "+pmEnd).getTime())-(sdf.parse(startTime).getTime()));
//其他时间 都在上午上班前 || 都在中午 || 都在下午下班之后
}else{
duration=0;
}
}else{
duration=0;
}
}else if(auto_holidays==1){ //不排除节假日
//((必打卡 || 工作日 )&& 不是不必打卡)
if((ToolsUtils.arrayToList(must).contains(startTime.substring(0,10)) || ToolsUtils.arrayToList(work_days).contains(String.valueOf(DateUtils.getDayOfWeek(startTime.substring(0,10))))) && ToolsUtils.arrayToList(notMust).contains(startTime.substring(0,10))==false){
//开始时间在上午上班前 结束时间在上午下班之前
if(startTime.substring(11).compareTo(amStart)<=0 && endTime.substring(11).compareTo(amEnd)<=0 && endTime.substring(11).compareTo(amStart)>=0){
duration=(int) ((sdf.parse(endTime).getTime())-(sdf.parse(startTime.substring(0,10)+" "+amStart).getTime()));
//开始时间在上午上班前 && 结束时间在下午上班前
}else if(startTime.substring(11).compareTo(amStart)<=0 && endTime.substring(11).compareTo(amEnd)>0 && endTime.substring(11).compareTo(pmStart)<=0){
duration=(int) ((sdf.parse(endTime.substring(0,10)+" "+amEnd).getTime())-(sdf.parse(startTime.substring(0,10)+" "+amStart).getTime()));
//开始时间在上午上班前 && 结束时间在下午下班前
}else if(startTime.substring(11).compareTo(amStart)<=0 && endTime.substring(11).compareTo(pmStart)>0 && endTime.substring(11).compareTo(pmEnd)<=0){
duration= (int) ((sdf.parse(startTime.substring(0,10)+" "+amEnd).getTime())-(sdf.parse(startTime.substring(0,10)+" "+amStart).getTime())+(sdf.parse(endTime).getTime())-(sdf.parse(startTime.substring(0,10)+" "+pmStart).getTime()));
//开始时间在上午上班前 && 结束时间在下午下班之后
}else if(startTime.substring(11).compareTo(amStart)<=0 && endTime.substring(11).compareTo(pmEnd)>0){
duration=gongshi;
//开始时间在上午上班内 && 结束时间在上午下班前
}else if(startTime.substring(11).compareTo(amStart)>=0 && startTime.substring(11).compareTo(amEnd)<=0 && endTime.substring(11).compareTo(amEnd)<=0){
duration=(int) ((sdf.parse(endTime).getTime())-(sdf.parse(startTime).getTime()));
//开始时间在上午上班内 && 结束时间在中午
}else if(startTime.substring(11).compareTo(amStart)>=0 && startTime.substring(11).compareTo(amEnd)<=0 && endTime.substring(11).compareTo(amEnd)>0 && endTime.substring(11).compareTo(pmStart)<=0){
duration=(int) ((sdf.parse(startTime.substring(0,10)+" "+amEnd).getTime())-(sdf.parse(startTime).getTime()));
//开始时间在上午上班内 && 结束时间在下午
}else if(startTime.substring(11).compareTo(amStart)>=0 && startTime.substring(11).compareTo(amEnd)<=0 && endTime.substring(11).compareTo(pmStart)>0 && endTime.substring(11).compareTo(pmEnd)<=0){
duration=(int) ((sdf.parse(startTime.substring(0,10)+" "+amEnd).getTime())-(sdf.parse(startTime).getTime())+(sdf.parse(endTime).getTime())-(sdf.parse(endTime.substring(0,10)+" "+pmStart).getTime()));
//开始时间在上午上班内 && 结束时间在下午下班之后
}else if(startTime.substring(11).compareTo(amStart)>=0 && startTime.substring(11).compareTo(amEnd)<=0 && endTime.substring(11).compareTo(pmEnd)>0){
duration=(int) ((sdf.parse(startTime.substring(0,10)+" "+amEnd).getTime())-(sdf.parse(startTime).getTime())+(sdf.parse(endTime.substring(0,10)+" "+pmEnd).getTime())-(sdf.parse(endTime.substring(0,10)+" "+pmStart).getTime()));
//开始时间在中午 && 结束时间在下午
}else if(startTime.substring(11).compareTo(amEnd)>0 && startTime.substring(11).compareTo(pmStart)<=0 && endTime.substring(11).compareTo(pmStart)>0 && endTime.substring(11).compareTo(pmEnd)<=0){
duration= (int) ((sdf.parse(endTime).getTime())-(sdf.parse(endTime.substring(0,10)+" "+pmStart).getTime()));
//开始时间在中午 && 结束时间在下午下班之后
}else if(startTime.substring(11).compareTo(amEnd)>0 && startTime.substring(11).compareTo(pmStart)<=0 && endTime.substring(11).compareTo(pmEnd)>0){
duration=(int) ((sdf.parse(endTime.substring(0,10)+" "+pmEnd).getTime())-(sdf.parse(endTime.substring(0,10)+" "+pmStart).getTime()));
//开始时间在下午 && 结束时间在下午
}else if(startTime.substring(11).compareTo(pmStart)>0 && startTime.substring(11).compareTo(pmEnd)<=0 && endTime.substring(11).compareTo(pmEnd)<=0){
duration=(int) ((sdf.parse(endTime).getTime())-(sdf.parse(startTime).getTime()));
//开始时间在下午 && 结束时间在下午下班之后
}else if(startTime.substring(11).compareTo(pmStart)>0 && startTime.substring(11).compareTo(pmEnd)<=0 && endTime.substring(11).compareTo(pmEnd)>0){
duration=(int) ((sdf.parse(endTime.substring(0,10)+" "+pmEnd).getTime())-(sdf.parse(startTime).getTime()));
//其他时间 都在上午上班前 || 都在中午 || 都在下午下班之后
}else{
duration=0;
}
}else{
duration=0;
}
}
}else{//跨天
List list = new ArrayList<>();
try {
list = DateUtils.dateSplit(startTime.substring(0, 10), endTime.substring(0, 10),"yyyyMMdd");
} catch (Exception e) {
e.printStackTrace();
}
if(auto_holidays == 0){//节假日休班
for (int i = list.size()-1; i >= 0; i--) {
if(i==(list.size()-1)){
//(必打卡 || (工作日 && 不是节假日)&& 不是不必打卡)
if((ToolsUtils.arrayToList(must).contains(sdf.format(list.get(i)).substring(0, 10)) || (ToolsUtils.arrayToList(work_days).contains(String.valueOf(DateUtils.getDayOfWeek(sdf.format(list.get(i)).substring(0, 10)))) && !(yuservice.queryYearUtilByDayFormat(sdf.format(list.get(i)).substring(0, 10))).get(0).getHoliday_status().equals("2"))) && ToolsUtils.arrayToList(notMust).contains(sdf.format(list.get(i)).substring(0,10))==false){
//开始在上午上班之前
if(startTime.substring(11).compareTo(amStart)<=0){
duration+=gongshi;
//开始在上午上班
}else if(startTime.substring(11).compareTo(amStart)>0 && startTime.substring(11).compareTo(amEnd)<=0){
duration+=(gongshi-(sdf.parse(startTime).getTime()-sdf.parse(startTime.substring(0,10)+" "+amStart).getTime()));
//开始在中午
}else if(startTime.substring(11).compareTo(amEnd)>0 && startTime.substring(11).compareTo(pmStart)<=0){
duration+=xiawu;
//开始在下午上班
}else if(startTime.substring(11).compareTo(pmStart)>0 && startTime.substring(11).compareTo(pmEnd)<=0){
duration+=(sdf.parse(startTime.substring(0,10)+" "+pmEnd).getTime()-sdf.parse(startTime).getTime());
//开始在下午下班之后
}else if(startTime.substring(11).compareTo(pmEnd)>0){
duration+=0;
}
}else{
duration+=0;
}
//结束当天
}else if(i==0){
//(必打卡 || (工作日 && 不是节假日)&& 不是不必打卡)
if((ToolsUtils.arrayToList(must).contains(sdf.format(list.get(i)).substring(0, 10)) || (ToolsUtils.arrayToList(work_days).contains(String.valueOf(DateUtils.getDayOfWeek(sdf.format(list.get(i)).substring(0, 10)))) && !(yuservice.queryYearUtilByDayFormat(sdf.format(list.get(i)).substring(0, 10))).get(0).getHoliday_status().equals("2"))) && ToolsUtils.arrayToList(notMust).contains(sdf.format(list.get(i)).substring(0,10))==false){
//结束在上午上班之前
if(endTime.substring(11).compareTo(amStart)<=0){
duration+=0;
//结束在上午上班
}else if(endTime.substring(11).compareTo(amStart)>0 && endTime.substring(11).compareTo(amEnd)<=0){
duration+=(sdf.parse(endTime).getTime()-sdf.parse(endTime.substring(0,10)+" "+amStart).getTime());
//结束在中午
}else if(endTime.substring(11).compareTo(amEnd)>0 && endTime.substring(11).compareTo(pmStart)<=0){
duration+=shangwu;
//结束在下午上班
}else if(endTime.substring(11).compareTo(pmStart)>0 && endTime.substring(11).compareTo(pmEnd)<=0){
duration+=(gongshi-(sdf.parse(endTime.substring(0,10)+" "+pmEnd).getTime()-sdf.parse(endTime).getTime()));
}else if(endTime.substring(11).compareTo(pmEnd)>0){
duration+=gongshi;
}
}else{
duration+=0;
}
//日期期间
}else if(0= 0; i--) {
if(i == (list.size()-1)){//开始当天
//((必打卡 || 工作日)&& 不是不必打卡日期)
if((ToolsUtils.arrayToList(must).contains(sdf.format(list.get(i)).substring(0, 10)) || ToolsUtils.arrayToList(work_days).contains(String.valueOf(DateUtils.getDayOfWeek(sdf.format(list.get(i)).substring(0, 10))))) && ToolsUtils.arrayToList(notMust).contains(sdf.format(list.get(i)).substring(0,10))==false){
//开始在上午上班之前
if(startTime.substring(11).compareTo(amStart)<=0){
duration+=gongshi;
//开始在上午上班
}else if(startTime.substring(11).compareTo(amStart)>0 && startTime.substring(11).compareTo(amEnd)<=0){
duration+=(gongshi-(sdf.parse(startTime).getTime()-sdf.parse(startTime.substring(0,10)+" "+amStart).getTime()));
//开始在中午
}else if(startTime.substring(11).compareTo(amEnd)>0 && startTime.substring(11).compareTo(pmStart)<=0){
duration+=xiawu;
//开始在下午上班
}else if(startTime.substring(11).compareTo(pmStart)>0 && startTime.substring(11).compareTo(pmEnd)<=0){
duration+=(sdf.parse(startTime.substring(0,10)+" "+pmEnd).getTime()-sdf.parse(startTime).getTime());
//开始在下午下班之后
}else if(startTime.substring(11).compareTo(pmEnd)>0){
duration+=0;
}
}else{
duration+=0;
}
}else if(i == 0){//结束当天
//((必打卡 || 工作日)&& 不是不必打卡日期)
if((ToolsUtils.arrayToList(must).contains(sdf.format(list.get(i)).substring(0, 10)) || ToolsUtils.arrayToList(work_days).contains(String.valueOf(DateUtils.getDayOfWeek(sdf.format(list.get(i)).substring(0, 10))))) && ToolsUtils.arrayToList(notMust).contains(sdf.format(list.get(i)).substring(0,10))==false){
//结束在上午上班之前
if(endTime.substring(11).compareTo(amStart)<=0){
duration+=0;
//结束在上午上班
}else if(endTime.substring(11).compareTo(amStart)>0 && endTime.substring(11).compareTo(amEnd)<=0){
duration+=(sdf.parse(endTime).getTime()-sdf.parse(endTime.substring(0,10)+" "+amStart).getTime());
//结束在中午
}else if(endTime.substring(11).compareTo(amEnd)>0 && endTime.substring(11).compareTo(pmStart)<=0){
duration+=shangwu;
//结束在下午上班
}else if(endTime.substring(11).compareTo(pmStart)>0 && endTime.substring(11).compareTo(pmEnd)<=0){
duration+=(gongshi-(sdf.parse(endTime.substring(0,10)+" "+pmEnd).getTime()-sdf.parse(endTime).getTime()));
}else if(endTime.substring(11).compareTo(pmEnd)>0){
duration+=gongshi;
}
}else{
duration+=0;
}
}else if(0
方法注释很详细,就不再赘述了。
在JSP页面直接调用就好了。
最终的时长会根据考勤规则的设置信息剔除休息日、工作日、特殊日期(必打卡&不必打卡日期),然后根据设置的一天的工时来计算请假时长。