由于公司需要按照工作日进行计算,所以需要在数据库存储一套日历数据,标明每一天是工作日还是假日。 1. 现设计一个表,表结构如下: CREATE TABLE `sys_calendar` ( `id` int(11) NOT NULL AUTO_INCREMENT, `day` varchar(32) DEFAULT NULL COMMENT '日期', `type` tinyint(11) DEFAULT NULL COMMENT '日期类型:0-工作日,1-假日补班,2-法定假日,3-公休日', `year` varchar(16) DEFAULT NULL COMMENT '年份', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=366 DEFAULT CHARSET=utf8; 2. 调用http://api.goseek.cn/Tools/holiday判断是假期还是工作日。 具体代码如下:
public static String request(String httpArg) { //工作日对应结果为 0, 休息日对应结果为 1, 节假日对应的结果为 2 String httpUrl = "http://api.goseek.cn/Tools/holiday"; String result = ""; StringBuffer sbf = new StringBuffer(); httpUrl = httpUrl + "?date=" + httpArg; try { URL url = new URL(httpUrl); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); connection.setRequestMethod("GET"); connection.connect(); InputStream is = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); String strRead; while ((strRead = reader.readLine()) != null) { sbf.append(strRead); sbf.append("\r\n"); } reader.close(); result = MapUtils.getString(jsonStringToMap(String.valueOf(sbf)),"data"); } catch (Exception e) { e.printStackTrace(); } return result; } private static Map<String, Object> jsonStringToMap(String json) { //String转成JSONObject形式 JSONObject jsonArray = JSONObject.parseObject(json); Map<String, Object> param = JSONObject.parseObject(jsonArray.toJSONString(), new TypeReference<Map<String, Object>>() {}); return param; } public static void main(String[] args) { Calendar cal = Calendar.getInstance();//获取Calendar cal.clear(); cal.setTime(new Date()); //设置日期 cal.set(Calendar.MONTH,0); //设置月份从1月开始 cal.set(Calendar.DAY_OF_MONTH, 1); Integer year = cal.get(Calendar.YEAR); //获取设置的日期年份 for (int i = 0; i < 12; i++) {//循环输出一年中的12个月, Integer month = cal.get(Calendar.MONTH)+1; int day=cal.getActualMaximum(Calendar.DAY_OF_MONTH);//计算每个月有多少天 System.out.println(year+"年"+month+"月"+"有"+day+"天"); for (int j = 0; j < day; j++,cal.add(Calendar.DATE, 1)) {//循环输出一个月中的每一天,cal.add()方法设置每次增加一天 Integer days = cal.get(Calendar.DATE); System.out.println(days+"日"); SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd"); String theDay = sf.format(cal.getTime()); String str = request(theDay); if ("0".equals(str)) { // 工作日 System.out.println("insert into sys_calendar ('day','type','year') values ("+ theDay+","+ 0 +","+ 2019+")"); }else if ("1".equals(str)) { // 法定节假日 System.out.println("insert into sys_calendar ('day','type','year') values ("+ theDay+","+ 2 +","+ 2019+")"); }else if ("2".equals(str)) { // 节假日调休补班 System.out.println("insert into sys_calendar ('day','type','year') values ("+ theDay+","+ 1 +","+ 2019+")"); }else if ("3".equals(str)) { // 公休日 System.out.println("insert into sys_calendar ('day','type','year') values ("+ theDay+","+ 3 +","+ 2019+")"); } } cal.add(Calendar.MONTH, 0);// cal.add()方法设置每次增加一个月 } } 更新于2020-12-22: 此接口http://api.goseek.cn/Tools/holiday不能使用了,大家可以到网上找类似的获取节假日的接口。此接口可用:http://timor.tech/api/holiday/info/$date