背景:管理后台添加节日规则,前端展示节日


实现方案设计

将所有节日分类,每类节日对应一个时间计算规则,添加节日时生成该节日近50年的时间,前端查询节日时,根据传入时间戳,即可查询最近节日。

代码:

@Getter
@AllArgsConstructor
public enum FestivalCreateTypeEnum {SOLAR_DAY(1,"阳历的某月某天"),LUNAR_DAY(2,"阴历的某月某天"),TWENTY_FOUR(3,"二十四节气"),WEEK_DAY(4,"每年某月某周周几"),LAST_WEEK_DAY(6,"每年某月最后一周周几"),F_BEFORE(5,"某个节日的前几天");private final int code;private final String desc;private static final Map<Integer, FestivalCreateTypeEnum> map = new HashMap<>();static {for (FestivalCreateTypeEnum typeEnum: FestivalCreateTypeEnum.values()) {map.put(typeEnum.getCode(), typeEnum);}}public static  FestivalCreateTypeEnum getEnum(int code){return map.get(code);}}
//添加节日入参
@Data
public class AddCalendarDto implements Serializable {/*** 创建类型 1-阳历每年某月某天,2-农历每年某与某天,* 3-二十四节气,4-每年某月某周 周几,5-某个节日的前几天or后几天* */private Integer createType;/*** 节日类型* */private Integer typeId;/*** 节日名称* */private String name;/*** 第几月* */private Integer monthNum;/*** 第几天* */private Integer dayNum;/*** 第几周* */private Integer weekCount;/*** 周几* */private Integer weekNum;/*** 二十四节气对应C值* */private Double c;/*** 时间* */private Long date;/*** 状态 0无效 1有效* */private Integer status;/*** 每个节气对应的顺序 0-小寒 1大寒 2立春 3雨水 4惊蛰 5春分 6清明 7谷雨 8立夏 9小满 10芒种 11夏至* 12小暑 13大暑 14立秋 15处暑 16白露 17秋分 18寒露 19霜降 20立冬 21小雪 22大雪 23冬至*/private Integer sort;/*** 时间类型 0非规律时间 1规律时间* */private Integer timeType;private String alias;private String desc;private String displayName;private String imageUrl;private String keyWords;private Integer festivalId;private List<Long> dateList;
}
//添加节日方法
public ServerResponse addFestival(AddCalendarDto param) {if (param.getTimeType() == null || StringUtils.isBlank(param.getName())) {return ServerResponse.createByError(-1,"参数错误");}//判断是否已经有该节日FestivalDo festivalDo = festivalDao.selectByName(param.getName());if (!Objects.isNull(festivalDo)) {return ServerResponse.createByError(-2,"该节日已存在");}//自定义节日if (param.getTimeType() == 0) {if (CollectionUtils.isEmpty(param.getDateList())) {return ServerResponse.createByError(-1,"参数错误");}CustomizeFestivalDto customizeFestivalDto = new CustomizeFestivalDto();customizeFestivalDto = (CustomizeFestivalDto)convertFesDto(customizeFestivalDto, param);customizeFestivalDto.setDateList(param.getDateList());customizeFestivalFactory.createFestival(customizeFestivalDto);return ServerResponse.createBySuccess();}//已有规律性节日FestivalCreateTypeEnum fTypeEnum = FestivalCreateTypeEnum.getEnum(param.getCreateType());if (Objects.isNull(fTypeEnum)) {return ServerResponse.createByError(-3,"节日创建类型错误");}boolean isSuccess = false;switch (fTypeEnum) {case F_BEFORE://依附于某个节日-寒食if (param.getFestivalId() == null || param.getDayNum()==0) {break;}BeforeFestivalDto beforeFestivalDto = new BeforeFestivalDto();beforeFestivalDto = (BeforeFestivalDto)convertFesDto(beforeFestivalDto, param);beforeFestivalDto.setFestivalId(param.getFestivalId());beforeFestivalDto.setDayCount(param.getDayNum());isSuccess = beforeFestivalFactory.createFestival(beforeFestivalDto);break;case WEEK_DAY://周几的节日-母亲节if (param.getMonthNum()<0 || param.getWeekCount()<0 || param.getWeekNum()<0) {break;}WeekFestivalDto weekFestivalDto = new WeekFestivalDto();weekFestivalDto = (WeekFestivalDto)convertFesDto(weekFestivalDto, param);weekFestivalDto.setMonthNum(param.getMonthNum());weekFestivalDto.setWeekCount(param.getWeekCount());weekFestivalDto.setWeekNum(param.getWeekNum());isSuccess = weekFestivalFactory.createFestival(weekFestivalDto);break;case LUNAR_DAY://农历的节日-春节if (param.getMonthNum()<0 || param.getDayNum()<0) {break;}LunarFestivalDto lFestivalDto = new LunarFestivalDto();lFestivalDto = (LunarFestivalDto)convertFesDto(lFestivalDto, param);lFestivalDto.setMonthNum(param.getMonthNum());lFestivalDto.setDayNum(param.getDayNum());isSuccess = lunarFestivalFactory.createFestival(lFestivalDto);break;case SOLAR_DAY://阳历的节日-劳动节if (param.getMonthNum() < 0 || param.getDayNum() < 0) {break;}SolarFestivalDto sFestivalDto = new SolarFestivalDto();sFestivalDto = (SolarFestivalDto)convertFesDto(sFestivalDto, param);sFestivalDto.setMonthNum(param.getMonthNum());sFestivalDto.setDayNum(param.getDayNum());isSuccess = solarFestivalFactory.createFestival(sFestivalDto);break;case TWENTY_FOUR://二十四节气if (param.getSort() < 0 || param.getC() < 0) {break;}TwentyFourFestivalDto tfParam = new TwentyFourFestivalDto();tfParam = (TwentyFourFestivalDto)convertFesDto(tfParam, param);tfParam.setC(param.getC());tfParam.setSort(param.getSort());tfParam.setName(tfParam.getName());isSuccess = twentyFourFestivalFactory.createFestival(tfParam);break;case LAST_WEEK_DAY://最后一周的周几-地球一小时if (param.getMonthNum() < 0 || param.getWeekNum() < 0) {break;}LastWeekFestivalDto lastWeekFestivalDto = new LastWeekFestivalDto();lastWeekFestivalDto = (LastWeekFestivalDto)convertFesDto(lastWeekFestivalDto, param);lastWeekFestivalDto.setMonthNum(param.getMonthNum());lastWeekFestivalDto.setWeekNum(param.getWeekNum());isSuccess = lastWeekFestivalFactory.createFestival(lastWeekFestivalDto);break;default:break;}if (isSuccess) {return ServerResponse.createBySuccess();}return ServerResponse.createByError(-10,"创建节日失败");}
//阳历节日
@Service
@Slf4j
public class SolarFestivalFactoryImpl implements FestivalFactory {@Autowiredprivate FestivalDao festivalDao;@Autowiredprivate FestivalTimeDao festivalTimeDao;@Overridepublic boolean createFestival(FestivalDto festivalDto) {//创建近3年的节日SolarFestivalDto solarFestivalDto = (SolarFestivalDto)festivalDto;FestivalDo festivalDo = new FestivalDo();festivalDo = DomainConvertUtils.festivalConvertDo(solarFestivalDto,festivalDo);festivalDo.setMonthNum(solarFestivalDto.getMonthNum());festivalDo.setDayNum(solarFestivalDto.getDayNum());festivalDao.insertSelective(festivalDo);FestivalDo fDo = festivalDao.selectByName(solarFestivalDto.getName());if (Objects.isNull(fDo)) {return false;}List<FestivalTimeDo> festivalTimeDos = Lists.newArrayList();//获取当前年Calendar rightNow = Calendar.getInstance();int year = rightNow.get(Calendar.YEAR);// 获取当前年份for (int i=0;i<50;i++) {FestivalTimeDo festivalTimeDo = new FestivalTimeDo();festivalTimeDo.setStatus(1);festivalTimeDo.setFestivalId(fDo.getId());String str = year+i+"-"+solarFestivalDto.getMonthNum()+"-"+solarFestivalDto.getDayNum();try {Date date = DateUtils.parseDate(str, "yyyy-MM-dd");festivalTimeDo.setTime(date);festivalTimeDos.add(festivalTimeDo);} catch (Exception e) {}}log.info("[SolarFestivalFactoryImpl]festivalTimeDos:{}", JSON.toJSONString(festivalTimeDos));if (CollectionUtils.isNotEmpty(festivalTimeDos)) {festivalTimeDao.batchInsert(festivalTimeDos);}return true;}}
//农历节日
@Service
@Slf4j
public class LunarFestivalFactoryImpl implements FestivalFactory {@Autowiredprivate FestivalDao festivalDao;@Autowiredprivate FestivalTimeDao festivalTimeDao;@Overridepublic boolean createFestival(FestivalDto festivalDto) {//创建近3年的节日LunarFestivalDto lunarFestivalDto = (LunarFestivalDto)festivalDto;FestivalDo festivalDo = new FestivalDo();festivalDo = DomainConvertUtils.festivalConvertDo(lunarFestivalDto,festivalDo);festivalDo.setMonthNum(lunarFestivalDto.getMonthNum());festivalDo.setDayNum(lunarFestivalDto.getDayNum());festivalDao.insertSelective(festivalDo);FestivalDo fDo = festivalDao.selectByName(lunarFestivalDto.getName());if (Objects.isNull(fDo)) {return false;}List<FestivalTimeDo> festivalTimeDos = Lists.newArrayList();//获取当前年Calendar rightNow = Calendar.getInstance();int year = rightNow.get(Calendar.YEAR);// 获取当前年份for (int i=0;i<50;i++) {FestivalTimeDo festivalTimeDo = new FestivalTimeDo();festivalTimeDo.setFestivalId(fDo.getId());festivalTimeDo.setStatus(1);//指定阴历的某一天Lunar luDate = new Lunar(year+i,lunarFestivalDto.getMonthNum(),lunarFestivalDto.getDayNum());festivalTimeDo.setTime(luDate.getSolar().getCalendar().getTime());festivalTimeDos.add(festivalTimeDo);}//批量添加festivalTimeDao.batchInsert(festivalTimeDos);return true;}
}
//二十四节气
@Service
@Slf4j
public class TwentyFourFestivalFactoryImpl implements FestivalFactory {@Autowiredprivate FestivalDao festivalDao;@Autowiredprivate FestivalTimeDao festivalTimeDao;//二十四节气日期偏移度private static final double D = 0.2422;//特殊年份节气日期偏移private final static Map<Integer, Integer[]> INCREASE_OFFSETMAP = new HashMap<Integer, Integer[]>();//+1偏移private final static Map<Integer, Integer[]> DECREASE_OFFSETMAP = new HashMap<Integer, Integer[]>();//-1偏移@Overridepublic boolean createFestival(FestivalDto festivalDto) {TwentyFourFestivalDto tfFestivalDto = (TwentyFourFestivalDto) festivalDto;FestivalDo festivalDo = new FestivalDo();festivalDo = DomainConvertUtils.festivalConvertDo(tfFestivalDto,festivalDo);festivalDao.insertSelective(festivalDo);FestivalDo fDo = festivalDao.selectByName(tfFestivalDto.getName());if (Objects.isNull(fDo)) {return false;}List<FestivalTimeDo> festivalTimeDos = Lists.newArrayList();log.info("[TwentyFourFestivalFactoryImpl]tfFestivalDto:{}",tfFestivalDto);//获取当前年Calendar rightNow = Calendar.getInstance();int year = rightNow.get(Calendar.YEAR);for (int i=0;i<50;i++) {Date date = sTerm(year + i, tfFestivalDto.getSort(), tfFestivalDto.getC());if (date == null) {break;}FestivalTimeDo festivalTimeDo = new FestivalTimeDo();festivalTimeDo.setFestivalId(fDo.getId());festivalTimeDo.setStatus(1);festivalTimeDo.setTime(date);festivalTimeDos.add(festivalTimeDo);}log.info("[TwentyFourFestivalFactoryImpl]festivalTimeDos:{}", JSON.toJSONString(festivalTimeDos));if (CollectionUtils.isNotEmpty(festivalTimeDos)) {festivalTimeDao.batchInsert(festivalTimeDos);}return true;}/*** 获取某年的第n个节气为几日(从0小寒起算)** @param year* @param n* @param centuryValue 气的21世纪C值,每个节气的世纪值都不同* @return*/private Date sTerm(int year, int n,double centuryValue) {int dateNum = 0;int y = year % 100;//步骤1:取年分的后两位数if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {//闰年if (n == 0 || n == 1 || n == 2 || n == 3) {//注意:凡闰年3月1日前闰年数要减一,即:L=[(Y-1)/4],因为小寒、大寒、立春、雨水这两个节气都小于3月1日,所以 y = y-1y = y - 1;//步骤2}}//获取月份int month = getFesMonth(n);dateNum = (int) (y * D + centuryValue) - (int) (y / 4);//步骤3,使用公式[Y*D+C]-L计算dateNum += specialYearOffset(year, n);//步骤4,加上特殊的年分的节气偏移量//获取当前年的第一天String dateStr = year+"-"+month+"-"+01;try {Date date = DateUtils.parseDate(dateStr, "yyyy-MM-dd");Date date1 = DateUtils.addDays(date, dateNum-1);return date1;} catch (Exception e) {}return null;}//获取每个节气对应的月份private int getFesMonth(int sort) {if (sort>24 || sort<0) {return 0;}if (sort < 2) {//0 1return 1;} else if (1 < sort && sort < 4) {//2 3return 2;} else if (sort>3 && sort<6) {// 4 5return 3;} else if (sort>5 && sort<8) {//6 7return 4;} else if (sort>7 && sort<10) {//8 9return 5;} else if (sort>9 && sort<12) {//10 11return 6;} else if (sort>11 && sort<14) {//12 13return 7;} else if (sort>13 && sort<16) {//14 15return 8;} else if (sort>15 && sort<18) {//16 17return 9;} else if (sort>17 && sort<20) {//18 19return 10;} else if (sort>19 && sort<22) {//20 21return 11;} else if (sort>21 && sort<24) {//22 23return 12;}return 0;}/*** 特例,特殊的年分的节气偏移量,由于公式并不完善,所以算出的个别节气的第几天数并不准确,在此返回其偏移量** @param year 年份* @param n    节气编号* @return 返回其偏移量*/private int specialYearOffset(int year, int n) {int offset = 0;offset += getOffset(DECREASE_OFFSETMAP, year, n, -1);offset += getOffset(INCREASE_OFFSETMAP, year, n, 1);return offset;}/*** 节气偏移量计算** @param map* @param year* @param n* @param offset* @return*/private int getOffset(Map<Integer, Integer[]> map, int year, int n, int offset) {int off = 0;Integer[] years = map.get(n);if (null != years) {for (int i : years) {if (i == year) {off = offset;break;}}}return off;}}
//周几的节日-母亲节
@Service("weekFestivalFactory")
@Slf4j
public class WeekFestivalFactoryImpl implements FestivalFactory {@Autowiredprivate FestivalTimeDao festivalTimeDao;@Autowiredprivate FestivalDao festivalDao;@DubboReferenceTemplateService templateService;@Overridepublic boolean createFestival(FestivalDto festivalDto) {//创建50年的节日WeekFestivalDto weekFestivalDto = (WeekFestivalDto) festivalDto;FestivalDo festivalDo = new FestivalDo();festivalDo = DomainConvertUtils.festivalConvertDo(weekFestivalDto,festivalDo);festivalDo.setMonthNum(weekFestivalDto.getMonthNum());festivalDo.setWeekCount(weekFestivalDto.getWeekCount());festivalDo.setWeekNum(weekFestivalDto.getWeekNum());festivalDao.insertSelective(festivalDo);FestivalDo fDo = festivalDao.selectByName(weekFestivalDto.getName());if (Objects.isNull(fDo)) {return false;}log.info("[WeekFestivalFactoryImpl]fDo:{}",fDo);List<FestivalTimeDo> festivalTimeDos = Lists.newArrayList();//获取当前年Calendar rightNow = Calendar.getInstance();int year = rightNow.get(Calendar.YEAR);// 获取当前年份for (int i = 0; i < 50; i++) {Date date = getSundayFestival(year + i, weekFestivalDto.getMonthNum(), weekFestivalDto.getWeekCount(), weekFestivalDto.getWeekNum());if (date == null) {break;}FestivalTimeDo festivalTimeDo = new FestivalTimeDo();festivalTimeDo.setTime(date);festivalTimeDo.setFestivalId(fDo.getId());festivalTimeDo.setStatus(1);festivalTimeDos.add(festivalTimeDo);}log.info("[WeekFestivalFactoryImpl]festivalTimeDos:{}", JSON.toJSONString(festivalTimeDos));if (CollectionUtils.isNotEmpty(festivalTimeDos)) {festivalTimeDao.batchInsert(festivalTimeDos);}return true;}/*** 周日的节日** @param year* @param month* @param weekCount 第几个周* @param weekNum   周几*/private Date getSundayFestival(int year, int month, int weekCount, int weekNum) {//获取当前年的第一天String dateStr = year + "-" + month + "-" + 01;Date date = null;try {date = DateUtils.parseDate(dateStr, "yyyy-MM-dd");} catch (Exception e) {return null;}Calendar cal = Calendar.getInstance();cal.setTime(date);int dayCount = cal.getActualMaximum(Calendar.DAY_OF_MONTH);cal.set(Calendar.YEAR, year);cal.set(Calendar.MONTH, month - 1);int sundays = 0;int mondays = 0;int tuesdays = 0;int wednesdays = 0;int thursdays = 0;int fridays = 0;int saturdays = 0;for (int i = 1; i <= dayCount; i++) {cal.set(Calendar.DATE, i);switch (weekNum) {case 7://周日if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {sundays++;if (sundays == weekCount) {String fDateStr = year + "-" + month + "-" + i;try {Date fDate = DateUtils.parseDate(fDateStr, "yyyy-MM-dd");return fDate;} catch (Exception e) {return null;}}}break;case 1://周一if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) {mondays++;if (mondays == weekCount) {String fDateStr = year + "-" + month + "-" + i;try {Date fDate = DateUtils.parseDate(fDateStr, "yyyy-MM-dd");return fDate;} catch (Exception e) {return null;}}}break;case 2://周二if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) {tuesdays++;if (tuesdays == weekCount) {String fDateStr = year + "-" + month + "-" + i;try {Date fDate = DateUtils.parseDate(fDateStr, "yyyy-MM-dd");return fDate;} catch (Exception e) {return null;}}}break;case 3://周三if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) {wednesdays++;if (wednesdays == weekCount) {String fDateStr = year + "-" + month + "-" + i;try {Date fDate = DateUtils.parseDate(fDateStr, "yyyy-MM-dd");return fDate;} catch (Exception e) {return null;}}}break;case 4://周四if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) {thursdays++;if (thursdays == weekCount) {String fDateStr = year + "-" + month + "-" + i;try {Date fDate = DateUtils.parseDate(fDateStr, "yyyy-MM-dd");return fDate;} catch (Exception e) {return null;}}}break;case 5://周五if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) {fridays++;if (fridays == weekCount) {String fDateStr = year + "-" + month + "-" + i;try {Date fDate = DateUtils.parseDate(fDateStr, "yyyy-MM-dd");return fDate;} catch (Exception e) {return null;}}}break;case 6://周六if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {saturdays++;if (saturdays == weekCount) {String fDateStr = year + "-" + month + "-" + i;try {Date fDate = DateUtils.parseDate(fDateStr, "yyyy-MM-dd");return fDate;} catch (Exception e) {return null;}}}break;default:break;}}return null;}
}
//最后一周周几的节日
@Service
@Slf4j
public class LastWeekFestivalFactoryImpl implements FestivalFactory {@Autowiredprivate FestivalDao festivalDao;@Autowiredprivate FestivalTimeDao festivalTimeDao;@Overridepublic boolean createFestival(FestivalDto festivalDto) {//创建近3年的节日LastWeekFestivalDto lastWeekDto = (LastWeekFestivalDto)festivalDto;FestivalDo festivalDo = new FestivalDo();festivalDo = DomainConvertUtils.festivalConvertDo(lastWeekDto,festivalDo);festivalDo.setMonthNum(lastWeekDto.getMonthNum());festivalDo.setWeekNum(lastWeekDto.getWeekNum());festivalDao.insertSelective(festivalDo);FestivalDo fDo = festivalDao.selectByName(lastWeekDto.getName());if (Objects.isNull(fDo)) {return false;}List<FestivalTimeDo> festivalTimeDos = Lists.newArrayList();//获取当前年Calendar rightNow = Calendar.getInstance();int year = rightNow.get(Calendar.YEAR);// 获取当前年份for (int i=0;i<50;i++) {Date result = getSundayFestival(year + i, lastWeekDto.getMonthNum() - 1, lastWeekDto.getWeekNum());if (result == null) {break;}FestivalTimeDo festivalTimeDo = new FestivalTimeDo();festivalTimeDo.setFestivalId(fDo.getId());festivalTimeDo.setStatus(1);festivalTimeDo.setTime(result);festivalTimeDos.add(festivalTimeDo);}log.info("[LastWeekFestivalFactoryImpl]festivalTimeDos:{}", JSON.toJSONString(festivalTimeDos));if (CollectionUtils.isNotEmpty(festivalTimeDos)) {festivalTimeDao.batchInsert(festivalTimeDos);}return true;}/*** 最后一周周几的节日* @param year* @param month* @param weekNum 周几*/private Date getSundayFestival(int year, int month, int weekNum) {//获取当前年的第一天String dateStr = year+"-"+month+"-"+01;Date date = null;Date result = null;try {date = DateUtils.parseDate(dateStr, "yyyy-MM-dd");} catch (Exception e) {return date;}Calendar d = Calendar.getInstance();d.setTime(date);d.set(d.MONTH, month);switch (weekNum) {case 7://周日d.set(d.DAY_OF_WEEK, d.SUNDAY);d.set(d.WEEK_OF_MONTH, d.getActualMaximum(d.WEEK_OF_MONTH));while (d.get(d.MONTH) > month || d.get(d.MONTH) < month) {d.add(d.WEEK_OF_MONTH, -1);}result = d.getTime();break;case 1://周一d.set(d.DAY_OF_WEEK, d.MONDAY);d.set(d.WEEK_OF_MONTH, d.getActualMaximum(d.WEEK_OF_MONTH));while (d.get(d.MONTH) > month || d.get(d.MONTH) < month) {d.add(d.WEEK_OF_MONTH, -1);}result = d.getTime();break;case 2://周二d.set(d.DAY_OF_WEEK, d.TUESDAY);d.set(d.WEEK_OF_MONTH, d.getActualMaximum(d.WEEK_OF_MONTH));while (d.get(d.MONTH) > month || d.get(d.MONTH) < month) {d.add(d.WEEK_OF_MONTH, -1);}result = d.getTime();break;case 3://周三d.set(d.DAY_OF_WEEK, d.WEDNESDAY);d.set(d.WEEK_OF_MONTH, d.getActualMaximum(d.WEEK_OF_MONTH));while (d.get(d.MONTH) > month || d.get(d.MONTH) < month) {d.add(d.WEEK_OF_MONTH, -1);}result = d.getTime();break;case 4://周四d.set(d.DAY_OF_WEEK, d.THURSDAY);d.set(d.WEEK_OF_MONTH, d.getActualMaximum(d.WEEK_OF_MONTH));while (d.get(d.MONTH) > month || d.get(d.MONTH) < month) {d.add(d.WEEK_OF_MONTH, -1);}result = d.getTime();break;case 5://周五d.set(d.DAY_OF_WEEK, d.FRIDAY);d.set(d.WEEK_OF_MONTH, d.getActualMaximum(d.WEEK_OF_MONTH));while (d.get(d.MONTH) > month || d.get(d.MONTH) < month) {d.add(d.WEEK_OF_MONTH, -1);}result = d.getTime();break;case 6://周六d.set(d.DAY_OF_WEEK, d.SATURDAY);d.set(d.WEEK_OF_MONTH, d.getActualMaximum(d.WEEK_OF_MONTH));while (d.get(d.MONTH) > month || d.get(d.MONTH) < month) {d.add(d.WEEK_OF_MONTH, -1);}result = d.getTime();break;default:break;}return result;}}

最终效果

有问题私信。。。。。

Java实现各种节日维护 农历,阳历,二十四节气 自定义节日,根据当前日期获取节日相关推荐

  1. 微信小程序农历阳历日期选择器选中日期同时获取对应农/阳历日期 这个demo问题的修改

    修改以下三个文件完成BUG的修复. selectdata.js文件中将农历转阳历的代码修改成: 以下是原selectdata.js中的代码 搜索:calendarConverter.lunar2sol ...

  2. 农历与二十四节气 API 数据接口

    农历与二十四节气 API 数据接口 任意日期查询,农历日期返回,全年节气. 1. 产品功能 支持任意日期的农历与二十四节气查询: 节气包含当日.下一个以及全年节气与日期: 同时返回农历中文: 数据持续 ...

  3. VUE获取节日(中国节+国际节)

    现在网上的开源节日基本都是做的节假日相关,本文为单纯的获取节日信息提供一个思路. 先上效果图: 首先,节日分为两部分:中国节和国际节,因为要分阳历和阴历,所以问题点就在这里. 转载 https://g ...

  4. 新历转旧历,获取节日

    </pre><pre name="code" class="php"><?php /** 农历 节气 节日* edit: www. ...

  5. HTML5期末大作业:中国传统节日网页设计——端午节(9个页面) HTML+CSS+JavaScript 节日网页HTML代码 学生网页课程设计期末作业下载...

    HTML5期末大作业:中国传统节日网站设计--端午节(9个页面) HTML+CSS+JavaScript 节日网页HTML代码 学生网页课程设计期末作业下载 临近期末, 你还在为HTML网页设计结课作 ...

  6. HTML5期末大作业:中国传统节日网页设计——端午节(9个页面) HTML+CSS+JavaScript 节日网页HTML代码 学生网页课程设计期末作业下载

    HTML5期末大作业:中国传统节日网站设计--端午节(9个页面) HTML+CSS+JavaScript 节日网页HTML代码 学生网页课程设计期末作业下载 临近期末, 你还在为HTML网页设计结课作 ...

  7. php一年节日,自动获取节日日期并显示灯笼效果的PHP源码

    原创内容,转载请注明出处:https://www.myzhenai.com.cn/post/3724.html 关键字:网站灯笼 春节灯笼 网站节日灯笼 因为之前我在网上找到了一个网站灯笼效果的CSS ...

  8. java爬取验证码图片_JAVA HttpClient实现页面信息抓取(获取图片验证码并传入cookie实现信息获取)...

    JAVA HttpClient实现页面信息抓取(获取图片验证码并传入cookie实现信息获取) 发布时间:2018-05-18 16:41, 浏览次数:632 , 标签: JAVA HttpClien ...

  9. 【实用】表维护视图SM30增加自定义按钮的实现

    表维护视图SM30增加自定义按钮的实现 1.新建Table并通过"表维护生成器"生成SM30维护视图. 正常的创建表维护视图到这一步也就结束了,最多是进函数组调整字段名称和显示效果 ...

最新文章

  1. 包邮送25本经典书籍,无任何套路!
  2. python3.8.5安装-centos7 编译安装python3.8.5
  3. A Step By Step Guide to Tomcat Performance Monitoring【转】
  4. Kubernetes学习之路(四)之Node节点二进制部署
  5. 同工不同酬,年薪 50 万美金的工程师到底有什么神本事?
  6. Vue组件及自定义事件
  7. qt中使窗口的大小随窗口的内容大小进行调整
  8. Java 多线程 —— AQS 原理
  9. 命令查看mysql端口映射_【转载】烂泥:如何利用telnet命令检测端口映射是否成功...
  10. tomcat 占用 dos
  11. 安卓app开发工具_手机APP开发会涉及到哪些知识点呢?
  12. easy2game使用教程_Easy2game什么用
  13. UnityEditor-Windows编辑器与Inspector编辑器
  14. mac os x 使用教程_如何在Mac OS X计算机上使用扫描仪
  15. C# 中的多线程和异步编程
  16. 我做过的最好的$ 4.90
  17. python3爬虫豆瓣前一百_Python爬虫基础4-豆瓣top100
  18. 阿里云短信服务Java实现
  19. 音视频开发大厂面试题(快手、百度、字节)
  20. B站这场跨年晚会价值60亿,凭啥?

热门文章

  1. Maven 常用镜像站地址
  2. 在位6年,谷歌GO语言负责人离职!曾带MongoDB、Docker走向辉煌
  3. Centos 7 开机一直转圈 提示failed to load SELinux policy freezing的解决方法
  4. python与cad交互_python 使用pyautocad操作AutoCAD
  5. 各种重力场模型下载网站
  6. sharepoint 模板安装
  7. logstash 数据重复问题
  8. 泡菜 亚硝酸_不要相信泡菜
  9. P6578 魔法少女网站
  10. QT5.6 安装 过程,实践经历……