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; } }