• JAVA组装一个日历数据


    package com.dawn.question.api.wechat.dao;
    
    import com.fasterxml.jackson.core.JsonGenerator;
    import com.fasterxml.jackson.databind.MappingJsonFactory;
    
    import java.io.StringWriter;
    import java.util.*;
    
    
    /**
     * Author: cg
     * Date: 2020/7/1 17:24
     * Content:
     */
    public class SignDataTableModel {
        
    
        private static String[] parsePatterns = {"yyyy-MM-dd",
                "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", "yyyy/MM/dd",
                "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", "yyyy.MM.dd",
                "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
        //第几天
        private Integer day;
        //是否签到(1:已签到,0:未签到)
        private Integer isSign;
        //是否是今天(1:是,0:否)
        private Integer isToday;
        //月份
        private Integer month;
        //月份字符串(month+"月")
        private String monthStr;
    
        public  Date parseDate(String str) {
            if (str == null) {
                return null;
            }
            try {
                return org.apache.commons.lang.time.DateUtils.parseDate(str, parsePatterns);
            } catch (java.text.ParseException e) {
                e.printStackTrace();
            }
            return null;
        }
        public Integer getWeekDayNumber(String dateStr) {
            Date date = parseDate(dateStr);
            Calendar calendar = Calendar.getInstance();
            if(date != null){
                calendar.setTime(date);
            }
            int w = calendar.get(Calendar.DAY_OF_WEEK) - 1;
            return w;
        }
        public Integer getMonthOneWeek(int dayNumber) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(new Date());
            String oneDay = cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-"+dayNumber+"";//1号日期
            int index = getWeekDayNumber(oneDay);
            if(index==0){
                index=7;
            }
            return  index;
        }
        /**
         * 获取的当月最后一天是几号
         */
        public  Integer getMonthLastDay() {
            Calendar cal = Calendar.getInstance();
            cal.setTime(new Date());
            int year = cal.get(Calendar.YEAR);
            int month = cal.get(Calendar.MONTH)+1;
            String beforeMonthLastStr = year+"-"+(month+1)+"-"+"01"; //上个月日期
            cal.setTime(parseDate(beforeMonthLastStr));
            cal.set(Calendar.DAY_OF_MONTH,0);
            return cal.get(Calendar.DAY_OF_MONTH);
        }
        /**
         * 获取的当月最后一天是星期几
         */
        public  Integer getMonthLastWeekNumber() {
            Calendar cal = Calendar.getInstance();
            cal.setTime(new Date());
            int lastDay = getMonthLastDay();//本月最后一天是几号
            String lastDayStr = cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-"+lastDay+"";//1号日期
            int index = getWeekDayNumber(lastDayStr);
            if(index==0){
                index=7;
            }
            return  index;
        }
    
        /**
         * 获取的上月最后一天是几号
         */
        public Integer getBeforeMonthLastDay() {
            Calendar cal = Calendar.getInstance();
            int year = cal.get(Calendar.YEAR);
            int month = cal.get(Calendar.MONTH)+1;
            if (month==12){
                month=0;
                year=year+1;
            }
            String beforeMonthLastStr = year+"-"+(month)+"-"+"01"; //上个月日期
            cal.setTime(parseDate(beforeMonthLastStr));
            cal.set(Calendar.DAY_OF_MONTH,0);
            return cal.get(Calendar.DAY_OF_MONTH);
        }
        
        public  String toJson(Object object) {
            MappingJsonFactory f = new MappingJsonFactory();
            StringWriter sw = new StringWriter();
            try {
                JsonGenerator generator = f.createGenerator(sw);
                generator.writeObject(object);
                generator.close();
            } catch (Exception e) {
                return "";
            }
            return sw.toString();
        }
    
        public static void main(String[] args) {
            /*组装日历数据*/
    //        headMap(year:'2019', month:'四月', days:[dataMap(rowIndex:0,data:[]) ])
            Map headMap = new HashMap();
            Calendar cal = Calendar.getInstance();
            headMap.put("year", cal.get(Calendar.YEAR));
            headMap.put("month", (cal.get(Calendar.MONTH) + 1) + "月");
            SignDataTableModel tableModel = new SignDataTableModel();
            List<SignDataTableModel> monthDataList = new ArrayList<>();
    
            int monthOneWeek = tableModel.getMonthOneWeek(1);//本月1号是星期几(1-7)
            int lastDay = tableModel.getMonthLastDay();//本月最后一天是几号
            int monthLastWeek = tableModel.getMonthLastWeekNumber();//本月最后一天是星期几(1-7)
            int beforeMonthLastDay = tableModel.getBeforeMonthLastDay();//上个月最后一天是几号
    
            int beforeDay = beforeMonthLastDay-monthOneWeek+2;
            int nextDay = 1;
            int index = 1;
            int totalCount = lastDay+monthOneWeek-1+(7-monthLastWeek);//日历表总天数
            int beforeMonth = cal.get(Calendar.MONTH);
            if(beforeMonth==0){
                beforeMonth=12;
            }
            int nextMonth = cal.get(Calendar.MONTH)+2;
            if(nextMonth==13){
                nextMonth=1;
            }
            for (int i=0;i<totalCount;i++){
                tableModel = new SignDataTableModel();
                tableModel.setIsToday(0);
                tableModel.setIsSign(0);
                if(beforeDay<=beforeMonthLastDay){
                    tableModel.setDay(beforeDay);
                    tableModel.setMonth(beforeMonth);
                    tableModel.setMonthStr(beforeMonth+"月");
                    beforeDay++;
                }else {
                    tableModel.setDay(index);
                    if (index==cal.get(Calendar.DATE)){
                        tableModel.setIsToday(1);
                    }
                    tableModel.setMonth(cal.get(Calendar.MONTH)+1);
                    tableModel.setMonthStr((cal.get(Calendar.MONTH)+1)+"月");
                    index++;
                }
                if(index-1>lastDay && 7-monthLastWeek>0){
                    tableModel.setDay(nextDay);
                    tableModel.setMonth(nextMonth);
                    tableModel.setMonthStr(nextMonth+"月");
                    nextDay++;
                }
                monthDataList.add(tableModel);
            }
            //日历表的签到数据
            int toDay = monthDataList.get(0).getDay();
            int endDay = monthDataList.get(monthDataList.size()-1).getDay();
            int year = cal.get(Calendar.YEAR);
            int month = cal.get(Calendar.MONTH)+1;
            String beforeMonthStr=beforeMonth+"";
            String nextMonthStr=nextMonth+"";
            if(beforeMonth<10){
                beforeMonthStr="0"+beforeMonthStr;
            }
            if(nextMonth<10){
                nextMonthStr="0"+nextMonthStr;
            }
            String monthStr = month+"";
            if(month<10){
                monthStr="0"+monthStr;
            }
            String statTime = year+"-"+monthStr+"-"+toDay;
            String endTime = year+"-"+monthStr+"-"+endDay;
            if(toDay>1){
                statTime=year+"-"+beforeMonthStr+"-"+toDay;
                if(beforeMonth==12){
                    statTime=(year-1)+"-"+beforeMonthStr+"-"+toDay;
                }
            }
            if(endDay<=7){
                endTime=year+"-"+nextMonthStr+"-0"+endDay;
                if(nextMonth==1){
                    endTime=(year+1)+"-"+nextMonthStr+"-0"+endDay;
                }
            }
    
            List<SignDataTableModel> rowDataList = new ArrayList<>();
            Map rowMap;
            List<Map> rowMaps = new ArrayList();
            int i=0;
            int rowNumber=0;
            for (SignDataTableModel signDataTableModel : monthDataList) {
                i++;
                rowDataList.add(signDataTableModel);
                if(i%7==0){
                    rowNumber++;
                    rowMap = new LinkedHashMap();
                    rowMap.put("rowIndex",rowNumber);
                    rowMap.put("data",rowDataList);
                    rowMaps.add(rowMap);
                    rowDataList = new ArrayList<>();
                }
            }
            headMap.put("days",rowMaps);
            System.out.println(tableModel.toJson(headMap));
        }
    
        public Integer getDay() {
            return day;
        }
    
        public void setDay(Integer day) {
            this.day = day;
        }
    
        public Integer getIsSign() {
            return isSign;
        }
    
        public void setIsSign(Integer isSign) {
            this.isSign = isSign;
        }
    
        public Integer getIsToday() {
            return isToday;
        }
    
        public void setIsToday(Integer isToday) {
            this.isToday = isToday;
        }
    
        public Integer getMonth() {
            return month;
        }
    
        public void setMonth(Integer month) {
            this.month = month;
        }
    
        public String getMonthStr() {
            return monthStr;
        }
    
        public void setMonthStr(String monthStr) {
            this.monthStr = monthStr;
        }
        
    }
  • 相关阅读:
    【北亚数据恢复】未加where子句的命令操作导致MySQL数据库数据丢失的数据恢复案例
    【北亚数据恢复】意外断电导致Dell服务器硬盘离线,raid5阵列数据丢失的数据恢复案例
    【北亚数据恢复】DELL POWEREDGE 2850服务器RAID5先后两块硬盘掉线后系统瘫痪的数据恢复
    log4j:WARN Please initialize the log4j system properly
    连接数据库 springboot环境下默认使用的是h2数据库,你没有对h2进行配置,这里我是mysql数据库,需要配置一下mysql数据库
    vue.config.js的proxy为什么不起作用
    连接数据库 driverclassname: com.mysql.cj.jdbc.Driver 报错的几种解决办法 三种办法
    <dependencyManagement>正确使用方法 多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号。当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要逐个修改子项目
    vue.config.js 的完整配置(超详细) 个性化 设置ip和端口
    服务网关 Zuul 与 Redis 结合实现 Token 权限校验
  • 原文地址:https://www.cnblogs.com/cg-take/p/13100362.html
Copyright © 2020-2023  润新知