1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 根据开始时间结束时间 计算工作日的天数

根据开始时间结束时间 计算工作日的天数

时间:2023-02-01 09:54:46

相关推荐

根据开始时间结束时间 计算工作日的天数

整理了一下,感觉第三方的接口不是很稳定,欢迎提供新的接口地址

import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import .HttpURLConnection;import .URL;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;/*** @author: DevanYan* @create: -06-10 10:52*///工作时长计算工具public class WorkDayUtil {private static final String API_URL = "/Tools/holiday?date=";private static final int WORK_STARK = 9;private static final int WORK_STOP = 18;/**** @param beginDateTime 开始时间* @param endDateTime 结束时间* @return 时长(单位:天,最小计数单位:0.5)*/public static double workDays(LocalDateTime beginDateTime,LocalDateTime endDateTime){double workDays = 0;LocalDate beginDate = LocalDate.of(beginDateTime.getYear(),beginDateTime.getMonth(),beginDateTime.getDayOfMonth());LocalDate endDate = LocalDate.of(endDateTime.getYear(),endDateTime.getMonth(),endDateTime.getDayOfMonth());Long days =Math.abs(beginDate.toEpochDay()-endDate.toEpochDay());int beginHour = Integer.valueOf(beginDateTime.format(DateTimeFormatter.ofPattern("HH")));int endHour = Integer.valueOf(endDateTime.format(DateTimeFormatter.ofPattern("HH")));if( beginDate.toString().equals(endDate.toString()) ){//同一天if(WorkDayUtil.isWorkDay(beginDate)){if( ( beginHour>= WORK_STARK && endHour >= WORK_STARK && beginHour <= 12 && endHour <= 12) || ( beginHour > 12 && endHour > 12 && beginHour <= WORK_STOP && endHour <= WORK_STOP) ){workDays = 0.5;}else{workDays = 1;}}else{workDays = 0;}}else{//跨天LocalDate dealDate = beginDate;for(int i = 0;i<days-1;i++){dealDate = dealDate.minusDays(-1);if(WorkDayUtil.isWorkDay(dealDate)){workDays++;}}//第一天if(WorkDayUtil.isWorkDay(beginDate)){if(beginHour>12 ){if(beginHour <= WORK_STOP){workDays = workDays + 0.5;}}else{workDays ++;}}//末天if(WorkDayUtil.isWorkDay(endDate)){if(endHour <= 12){workDays = workDays + 0.5;}else{workDays ++;}}}return workDays;}public static boolean isWorkDay(LocalDate date){String dayStr = date.format(DateTimeFormatter.ofPattern("yyyyMMdd"));int flag = WorkDayUtil.apiGet(dayStr);if(flag == 0 || flag == 2){return true;}return false;}/*** @param dateStr* @return 正常工作日对应结果为 0, 法定节假日对应结果为 1, 节假日调休补班对应的结果为 2,休息日对应结果为 3*/public static int apiGet( String dateStr) {String httpUrl= API_URL + dateStr;BufferedReader reader = null;String result = null;StringBuffer sbf = new StringBuffer();int d = 0;try {URL url = new URL(httpUrl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.connect();InputStream is = connection.getInputStream();reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));String strRead = null;while ((strRead = reader.readLine()) != null) {sbf.append(strRead);}reader.close();result = sbf.toString();result = result.trim();System.out.println(result);if(result.indexOf("10000")!=-1){result = result.substring(result.indexOf(":")+1);result = result.substring(result.indexOf(":")+1);result = result.substring(0,result.length()-1);d = Integer.valueOf(result);}} catch (Exception e) {e.printStackTrace();}return d;}public static void main(String[] args) {LocalDateTime begin = LocalDateTime.parse("-06-01 09:00:00",DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));LocalDateTime end = LocalDateTime.parse("-06-14 11:00:00",DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));System.out.println("工作日:"+WorkDayUtil.workDays(begin,end) +"天");}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。