当前年的日历存储到数据库,用于判断某一天是假期还是工作日

由于公司需要按照工作日进行计算,所以需要在数据库存储一套日历数据,标明每一天是工作日还是假日。
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

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页