Java生成日历,排除周六日以及法定节假日

一、生成简单日历,排除周六日和法定节假日
二、生成日历,农历转换,排除节假日

一、生成简单的日历
1.设置某年的开始时间和结束时间,例如:2021-01-01到2021-12-31
2.根据天获取星期几
3.排除周六日
4.手动传参排除法定节假日
5.获取到的日历写入到txt中保存

生成日历代码:

@Slf4j
public class DateWeekUtils {/*** 获取日期* @return*/public static Map<String,String> getToDay(String year){Map<String,String> result = new LinkedHashMap<>();try {//如果没有传入需要生成哪年的日历,则会自动生成明年的。如果传入哪年的就生成哪年的日历if (StringUtil.isBlank(year)){year = String.valueOf(Calendar.getInstance().get(Calendar.YEAR) + 1);}//开始时间Calendar startTime = Calendar.getInstance();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");startTime.setTime(simpleDateFormat.parse(year + "-01-01"));//结束时间Calendar endTime = Calendar.getInstance();endTime.setTime(simpleDateFormat.parse(year + "-12-31"));while (startTime.compareTo(endTime) <= 0) {String week = dateToWeek(simpleDateFormat.format(startTime.getTime()));if (!"星期六".equals(week) && !"星期日".equals(week)){result.put(simpleDateFormat.format(startTime.getTime()).trim(),week.trim());}//时间加一天startTime.set(Calendar.DATE, startTime.get(Calendar.DATE) + 1);}}catch (Exception e){log.info("DateWeekUtils-->getToDay() 获取时间错误:{}",e.getMessage());}return result;}/*** 根据日期获取 星期 (2019-05-06 ——> 星期一)* @param datetime* @return*/private static String dateToWeek(String datetime) {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};Calendar cal = Calendar.getInstance();Date date;try {date = format.parse(datetime);cal.setTime(date);} catch (ParseException e) {log.info("DateWeekUtils-->dateToWeek() 获取周错误:{}",e.getMessage());}//一周的第几天int w = cal.get(Calendar.DAY_OF_WEEK) - 1;if (w < 0)w = 0;return weekDays[w];}/*** 获取当前 年月日* @return*/public static String date(){return new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime());}
}

生成的日历写入到txt中的代码:

 //日历文件存放的位置@Value("${vacation-file.url}")private String vacationPath;public void writeToTxt(String name, Map<String, String> dayMap, List<String> holidaySeason) {try {String line = System.getProperty("line.separator");StringBuffer str = new StringBuffer();FileWriter fw = new FileWriter(vacationPath + name + ".txt");//移除节假日if (holidaySeason != null && holidaySeason.size() > 0) {for (int i = 0; i < holidaySeason.size(); i++) {dayMap.remove(holidaySeason.get(i));}}Set set = dayMap.entrySet();Iterator iter = set.iterator();while (iter.hasNext()) {Map.Entry entry = (Map.Entry) iter.next();str.append(entry.getKey().toString().trim() + ":" + entry.getValue().toString().trim()).append(line);}fw.write(str.toString());fw.close();} catch (Exception e) {log.info("写入到txt错误:{}", e.getMessage());}}public Map<String, String> readTxt(String name) {Map<String, String> map = new LinkedHashMap<>();try {String path = vacationPath + name + ".txt";BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(path)), "UTF-8"));String lineTxt = null;// 逐行读取while ((lineTxt = br.readLine()) != null) {// 每行数据以逗号分隔String[] names = lineTxt.split(":");// 处理数据, 可以转成entity, 在这儿转换成mapmap.put(names[0], names[1]);}br.close();} catch (Exception e) {log.info("读取txt失败:{}", e.getMessage());}return map;}
}

测试接口:

@Slf4j
@RestController
@RequestMapping("calendar")
public class CalendarController {@Autowiredprivate FileUtils fileUtils;/*** 获取日历并写入到txt中* @param year* @return*/@PostMapping("/toDayWeek")public Map<String,String> getCalendar(@RequestParam String year,@RequestParam List<String> holidaySeason){Map<String, String> toDayWeek = DateWeekUtils.getToDay(year);if (toDayWeek != null && toDayWeek.size() > 0) {fileUtils.writeToTxt(year, toDayWeek,holidaySeason);}return toDayWeek;}/*** 读取日历txt* @param name* @return*/@GetMapping("/read")public Map<String, String> readTxt(String name){Map<String, String> map = fileUtils.readTxt(name);return map;}
}

部分结果集:
接口返回结果集:
txt保存的结果:

简单的日历至此生成结束。。。

二、农历转换,自动移除法定节假日

1.需要自己制定放假规则

获取日历,移除法定节假日:

public class VacationDayCalculate {// 3天节假日规则=节日在周几,放假日在周几_放假之前的多少天上班_放假后的多少天上班;private String vacationWeek = "1,6-7-1_0_0;2,7-1-2_1_0;3,1-2-3_2_0;4,4-5-6_0_1;5,5-6-7_0_0;6,6-7-1_0_0;7,6-7-1_0_0";// 7天节假日规则=节日在周几,放假之前的多少天上班_放假后的多少天上班;private String vacationMax = "1,2_0;2,2_0;3,3_0;4,0_3;5,0_2;6,0_2;7,1_1";/*** 一个时间集合,放假则为true,工作日为false 放假包括国家法定节假日和双休日*/public HashMap<String, Boolean> yearVacationDay(Integer year) {HashMap<String, Boolean> dates = weekVacation(year - 1);// 3天假日在周几放假规则HashMap<Integer, String> weeks = new HashMap<>();String[] weeksTemp = vacationWeek.split(";");for (String weekStr : weeksTemp) {String[] week = weekStr.split(",");weeks.put(Integer.parseInt(week[0]), week[1]);}// 元旦节公历一月一日,放假1天String vacationDay = year + "-01-01";dates.put(year +"-01-01", true);// 清明节(不分日历,有规律)年份能整除4的年和下一年为4月4日,再下两年为4月5日,放假3天int temp = year & 3;if (temp < 2) {vacationDay = year + "-04-04";} else {vacationDay = year + "-04-05";}setVacationThreeDay(vacationDay, dates, weeks);// 劳动节公历五月一日,放假五天,没有倒休dates.put(year +"-05-01", true);dates.put(year +"-05-02", true);dates.put(year +"-05-03", true);dates.put(year +"-05-04", true);dates.put(year +"-05-05", true);// 端午节农历五月初五,放假3天vacationDay = lunar(year.toString(), 5, 5);setVacationThreeDay(vacationDay, dates, weeks);// 中秋节农历八月十五,放假3天vacationDay = lunar(year.toString(), 8, 15);setVacationThreeDay(vacationDay, dates, weeks);// 7天假日在周几放假规则weeks.clear();weeksTemp = vacationMax.split(";");for (String weekStr : weeksTemp) {String[] week = weekStr.split(",");weeks.put(Integer.parseInt(week[0]), week[1]);}// 春节农历一月初一,放假从前一天除夕开始,放假7天vacationDay = lunar(year.toString(), 1, 1);SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");try {Long time = format.parse(vacationDay).getTime() - 86399000;vacationDay = format.format(time);} catch (ParseException e) {e.printStackTrace();}setVacationSevenDay(vacationDay, dates, weeks);// 国庆节公历十月一号,放假7天vacationDay = year + "-10-01";setVacationSevenDay(vacationDay, dates, weeks);return dates;}/*** 从21月1日起放入之后一年的时间 注:可通过代码的注释和释放选择是否加入双休日* @return map集合,key为日期(不包括年),value是true为休息日,false为工作日*/private HashMap<String, Boolean> weekVacation(Integer year) {// 放入一年的时间HashMap<String, Boolean> dates = new LinkedHashMap<>();Calendar cal = Calendar.getInstance();cal.setTime(DateUtils.getDateByString(year + "-12-1 12:00:00", "yyyy-MM-dd hh:mm:ss"));Integer days = 365;if ((year & 3) == 0) {days = 366;}for (int i = 0, j = 0; i < days; i++, j = 1) {cal.add(Calendar.DAY_OF_YEAR, j);String date = DateUtils.getStringDateByString(cal.getTime(), "yyyy-MM-dd");// 这里加入双休Integer ifVacation = dayForWeek(cal.getTime().getTime());if (ifVacation == 6 || ifVacation == 7) {dates.put(date, true);} else {dates.put(date, false);}// 若不需要双休,只需要法定假日,则将上面的几行注释掉,放开下面这一行
//            dates.put(date, false);}return dates;}/*** 3天假期 计算放假日期和上班日期并修改* @param vacationDay 节日* @param dates 时间集合* @param weeks 放假周规律集合*/private void setVacationThreeDay(String vacationDay, HashMap<String, Boolean> dates,HashMap<Integer, String> weeks) {Integer week = dayForWeek(vacationDay);String[] vacation = weeks.get(week).split("_");int indexOf = vacation[0].indexOf(week.toString());Integer[] interval = dayForWeekThree(indexOf);Integer incr = Integer.parseInt(vacation[1]);Integer decr = Integer.parseInt(vacation[2]);List<String> vacationDate = dayForWeek(vacationDay, interval[0], interval[1]);for (String day : vacationDate) {dates.put(day, true);}List<String> workDate = dayForWork(vacationDay, interval[0], interval[1], incr, decr);for (String day : workDate) {dates.put(day, false);}}/*** 7天假期 计算放假日期和上班日期并修改* @param vacationDay 节日* @param dates 时间集合* @param weeks 放假周规律集合*/private void setVacationSevenDay(String vacationDay, HashMap<String, Boolean> dates,HashMap<Integer, String> weeks) {Integer week = dayForWeek(vacationDay);String[] vacation = weeks.get(week).split("_");Integer incr = Integer.parseInt(vacation[0]);Integer decr = Integer.parseInt(vacation[1]);List<String> vacationDate = dayForWeek(vacationDay, 0, 6);for (String day : vacationDate) {dates.put(day, true);}List<String> workDate = dayForWork(vacationDay, 0, 6, incr, decr);for (String day : workDate) {dates.put(day, false);}}/*** 获得指定字符串的时间是星期几* @param pTime 时间字符串*/private Integer dayForWeek(String pTime) {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");Calendar cal = Calendar.getInstance();try {Date tmpDate = format.parse(pTime);cal.setTime(tmpDate);} catch (Exception e) {e.printStackTrace();}int w = cal.get(Calendar.DAY_OF_WEEK) - 1; // 指示一个星期中的某天。if (w < 0)w = 0;if (w == 0)w = 7;return w;}/*** 获得指定毫秒数的时间是星期几* @param pTime 时间字符串*/private Integer dayForWeek(Long pTime) {Calendar cal = Calendar.getInstance();try {cal.setTime(new Date(pTime));} catch (Exception e) {e.printStackTrace();}int w = cal.get(Calendar.DAY_OF_WEEK) - 1; // 指示一个星期中的某天。if (w < 0)w = 0;if (w == 0)w = 7;return w;}/*** 放假三天的假日放假时间* @param indexOf 节日在周几* @return 放假时间范围在节日之前开始和几日之后结束*/private Integer[] dayForWeekThree(Integer indexOf) {Integer incr, decr;if (indexOf == 0) {incr = 0;decr = 2;} else if (indexOf == 2) {incr = 1;decr = 1;} else {incr = 2;decr = 0;}return new Integer[] { incr, decr };}/*** 获得指定时间前几天的日期或者后几天的日期* @param pTime 时间* @param incr 之前几天* @param decr 之后几天* @return 放假时间日期集合*/private List<String> dayForWeek(String pTime, Integer incr, Integer decr) {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat rformat = new SimpleDateFormat("yyyy-MM-dd");List<String> result = new ArrayList<>(10);Calendar cal = Calendar.getInstance();try {Date tmpDate = format.parse(pTime);result.add(rformat.format(tmpDate));cal.setTime(tmpDate);} catch (Exception e) {e.printStackTrace();}for (int i = 0; i < incr; i++) {cal.add(Calendar.DAY_OF_YEAR, -1);result.add(rformat.format(cal.getTime()));}cal.add(Calendar.DAY_OF_YEAR, 1 * incr);for (int i = 0; i < decr; i++) {cal.add(Calendar.DAY_OF_YEAR, 1);result.add(rformat.format(cal.getTime()));}return result;}/*** 获得放假之前和之后需要上班的时间* @param pTime 节日时间* @param v_incr 节日之前几天开始放假* @param v_decr 节日之后几天开始放假* @param w_incr 节日之前工作几天* @param w_decr 节日之后工作几天* @return 节假日前后需要上班的周六日时间*/private List<String> dayForWork(String pTime, Integer v_incr, Integer v_decr, Integer w_incr, Integer w_decr) {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat rformat = new SimpleDateFormat("yyyy-MM-dd");Calendar cal = Calendar.getInstance();try {Date tmpDate = format.parse(pTime);cal.setTime(tmpDate);} catch (Exception e) {e.printStackTrace();}List<String> result = new ArrayList<>(5);cal.add(Calendar.DAY_OF_YEAR, v_incr * -1);for (int i = 0; i < w_incr; i++) {cal.add(Calendar.DAY_OF_YEAR, -1);result.add(rformat.format(cal.getTime()));}cal.add(Calendar.DAY_OF_YEAR, v_incr + w_incr + v_decr);for (int i = 0; i < w_decr; i++) {cal.add(Calendar.DAY_OF_YEAR, 1);result.add(rformat.format(cal.getTime()));}return result;}/*** 根据传入的农历日期计算公历日期* @param year 年* @param month 月* @param day 日* @return "年-月-日"*/public String lunar(String year, Integer month, Integer day) {Calendar cal = Calendar.getInstance();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");try {cal.setTime(sdf.parse(year + "-" + month + "-" + day));} catch (ParseException e) {e.printStackTrace();}calcuLunar(cal, month, day, new Lunar(true));return year + "-" + (cal.get(Calendar.MONTH) + 1) + "-" + cal.get(Calendar.DAY_OF_MONTH);}/*** 农历转公历计算* @param cal 日期对象* @param month 月* @param day 日*/public static void calcuLunar(Calendar cal, int month, int day, Lunar l) {Lunar lunar = new Lunar(cal);if (lunar.getMonth() != month) {cal.add(Calendar.MONTH, 1);calcuLunar(cal, month, day, l);}if (lunar.getDay() != day && l.isLeap()) {if (lunar.getDay() > day) {cal.add(Calendar.DAY_OF_YEAR, -1);} else {cal.add(Calendar.DAY_OF_YEAR, 1);}calcuLunar(cal, month, day, l);if (l.isLeap()) {l.setLeap(false);}}}
}

工具类:

public class DateUtils {/*** 获得指定时间格式的Date时间* @author wangzhe@piesat.cn* @date 2018年7月21日* @param time 时间字符串* @param plan 时间格式* @return 时间*/public static Date getDateByString(String time, String plan){Long times = getLongTimeByString(time, plan);return  new Date(times);}/*** 获得指定时间格式的时间* @author wangzhe@piesat.cn* @date 2018年7月21日* @param time 时间字符串* @param plan 时间格式* @return 时间*/public static String getStringDateByString(Date time,String plan){DateFormat format = new SimpleDateFormat(plan);return format.format(time);}/*** 获得指定时间格式的毫秒值* @author wangzhe@piesat.cn* @date 2018年7月17日* @param time 时间字符串* @param plan 时间格式* @return 毫秒值*/public static Long getLongTimeByString(String time,String plan){DateFormat format = new SimpleDateFormat(plan);Long result = null;try {result = format.parse(time).getTime();} catch (ParseException e) {e.printStackTrace();}return  result;}
}

转换农历:

 private int year;private int month;private int day;private boolean leap;final static String chineseNumber[] = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" };static SimpleDateFormat chineseDateFormat = new SimpleDateFormat("yyyy年MM月dd日");final static long[] lunarInfo = new long[] { 0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0,0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977,0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566, 0x0d4a0,0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0,0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573,0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950,0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6,0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970,0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960, 0x0d954, 0x0d4a0, 0x0da50,0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0,0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260,0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45,0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0 };// ====== 传回农历 y年的总天数final private static int yearDays(int y) {int i, sum = 348;for (i = 0x8000; i > 0x8; i >>= 1) {if ((lunarInfo[y - 1900] & i) != 0)sum += 1;}return (sum + leapDays(y));}// ====== 传回农历 y年闰月的天数final private static int leapDays(int y) {if (leapMonth(y) != 0) {if ((lunarInfo[y - 1900] & 0x10000) != 0)return 30;elsereturn 29;} elsereturn 0;}// ====== 传回农历 y年闰哪个月 1-12 , 没闰传回 0final private static int leapMonth(int y) {return (int) (lunarInfo[y - 1900] & 0xf);}// ====== 传回农历 y年m月的总天数final private static int monthDays(int y, int m) {if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0)return 29;elsereturn 30;}// ====== 传回农历 y年的生肖final public String animalsYear() {final String[] Animals = new String[] { "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪" };return Animals[(year - 4) % 12];}// ====== 传入 月日的offset 传回干支, 0=甲子final private static String cyclicalm(int num) {final String[] Gan = new String[] { "甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸" };final String[] Zhi = new String[] { "子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥" };return (Gan[num % 10] + Zhi[num % 12]);}// ====== 传入 offset 传回干支, 0=甲子final public String cyclical() {int num = year - 1900 + 36;return (cyclicalm(num));}public Lunar(boolean leap) {this.leap = leap;}/*** 传出y年m月d日对应的农历. yearCyl3:农历年与1864的相差数 ? monCyl4:从1900年1月31日以来,闰月数* dayCyl5:与1900年1月31日相差的天数,再加40 ?** @param cal* @return*/public Lunar(Calendar cal) {int yearCyl, monCyl, dayCyl;int leapMonth = 0;Date baseDate = null;try {baseDate = chineseDateFormat.parse("1900年1月31日");} catch (ParseException e) {e.printStackTrace(); // To change body of catch statement use// Options | File Templates.}// 求出和1900年1月31日相差的天数int offset = (int) ((cal.getTime().getTime() - baseDate.getTime()) / 86400000L);dayCyl = offset + 40;monCyl = 14;// 用offset减去每农历年的天数// 计算当天是农历第几天// i最终结果是农历的年份// offset是当年的第几天int iYear, daysOfYear = 0;for (iYear = 1900; iYear < 2050 && offset > 0; iYear++) {daysOfYear = yearDays(iYear);offset -= daysOfYear;monCyl += 12;}if (offset < 0) {offset += daysOfYear;iYear--;monCyl -= 12;}// 农历年份year = iYear;yearCyl = iYear - 1864;leapMonth = leapMonth(iYear); // 闰哪个月,1-12leap = false;// 用当年的天数offset,逐个减去每月(农历)的天数,求出当天是本月的第几天int iMonth, daysOfMonth = 0;for (iMonth = 1; iMonth < 13 && offset > 0; iMonth++) {// 闰月if (leapMonth > 0 && iMonth == (leapMonth + 1) && !leap) {--iMonth;leap = true;daysOfMonth = leapDays(year);} elsedaysOfMonth = monthDays(year, iMonth);offset -= daysOfMonth;// 解除闰月if (leap && iMonth == (leapMonth + 1))leap = false;if (!leap)monCyl++;}// offset为0时,并且刚才计算的月份是闰月,要校正if (offset == 0 && leapMonth > 0 && iMonth == leapMonth + 1) {if (leap) {leap = false;} else {leap = true;--iMonth;--monCyl;}}// offset小于0时,也要校正if (offset < 0) {offset += daysOfMonth;--iMonth;--monCyl;}month = iMonth;day = offset + 1;}public static String getChinaDayString(int day) {String chineseTen[] = { "初", "十", "廿", "卅" };int n = day % 10 == 0 ? 9 : day % 10 - 1;if (day > 30)return "";if (day == 10)return "初十";elsereturn chineseTen[day / 10] + chineseNumber[n];}public String toString() {return year + "年" + (leap ? "闰" : "") + chineseNumber[month - 1] + "月" + getChinaDayString(day);}public static void calcuLunar(Calendar cal, int month, int day, Lunar l) {Lunar lunar = new Lunar(cal);if (lunar.month != month) {cal.add(Calendar.MONTH, 1);calcuLunar(cal, month, day, l);}if (lunar.day != day && l.isLeap()) {if (lunar.day > day) {cal.add(Calendar.DAY_OF_YEAR, -1);} else {cal.add(Calendar.DAY_OF_YEAR, 1);}calcuLunar(cal, month, day, l);if (l.isLeap()) {l.setLeap(false);}}}public int getYear() {return year;}public void setYear(int year) {this.year = year;}public int getMonth() {return month;}public void setMonth(int month) {this.month = month;}public int getDay() {return day;}public void setDay(int day) {this.day = day;}public boolean isLeap() {return leap;}public void setLeap(boolean leap) {this.leap = leap;}/** public static void main(String[] args) { Calendar* cal=Calendar.getInstance(); SimpleDateFormat sdf=new* SimpleDateFormat("yyyy年MM月dd日"); cal.setTimeZone(TimeZone.getDefault());* System.out.println("公历日期:"+sdf.format(cal.getTime())); Lunar lunar=new* Lunar(cal); System.out.print("农历日期:"); System.out.print(lunar.year+"年 ");* System.out.print(lunar.month+"月 ");* System.out.print(getChinaDayString(lunar.day));* System.out.println("*************"); System.out.println(lunar); }*//** public static void main(String[] args) throws ParseException { Calendar* today = Calendar.getInstance();* today.setTime(chineseDateFormat.parse("2007年11月6日")); Lunar lunar = new* Lunar(today); System.out.println("北京时间:" +* chineseDateFormat.format(today.getTime()) + " 农历" + lunar); }*/
}

农历转换这个生成日历的方法是在网上找的,在此记录一下,以免以后需要。。。

不足的地方,请各位大佬多多指教!!!

农历转换日历出自:https://blog.csdn.net/weixin_42997554/article/details/88535402

Java自动生成日历,移除节假日和周六日相关推荐

  1. java自动生成类_自动生成优化的Java类专业知识

    java自动生成类 如果您今年访问过JavaOne,您可能已经参加了我的演讲"如何从数据库生成定制的Java 8代码". 在那次演讲中,我展示了如何使用Speedment Open ...

  2. java自动生成合同_Java 7和Java 8之间的细微自动关闭合同更改

    java自动生成合同 Java 7的try-with-resources语句和与该语句一起使用的AutoCloseable类型的一个不错的功能是,静态代码分析工具可以检测到资源泄漏. 例如,Eclip ...

  3. java自动生成接口文档

    java自动生成接口文档 maven依赖 工具类 展示效果 首页 接口页 在平时的开发过程中必定要写接口文档 作为程序员 最烦的2件事 1.别人让你写接口文档 2.接手别人的项目没有接口文档 由此可见 ...

  4. Java自动生成PDF并进行邮件群发

    这段时间,公司承办一个互联网峰会,需要对4000多位客户发送邀请函,其中包括一个pdf文件和一封手写信,PDF中将从公司数据库中读取所有客户姓名,自动生成到相应位置,前期尝试Java自动生成pdf文件 ...

  5. Java自动生成二维码总结

    推荐一篇博客:Java自动生成带log的二维码 https://mp.csdn.net/postedit/84454677 第一种简单的方法: import java.io.File; import ...

  6. java自动生成sql语句

    java自动生成sql语句 艳学网强势来袭http://47.98.237.162/index,首次发布艳辉工具,第一个工具我们发布sql语句自动生成. 以前首次接触sql是在大学期间,刚开始是手写s ...

  7. 日期累加器(任意时间基础上加上天数,不包括节假日以及周六日)

    最近工作中遇到个需求,大致的实现功能是,在某一天的基础上加上规定的天数,所加的这些天中不包括周六日以及节假日. 比如: 在2月7日的基础上加7天,这7天不包含节假日和周六日,所以最后的时间应该是2月2 ...

  8. java自动生成数据库代码

    自从学习计算机以来,学习了很多知识,都是从网上学习的,特别感谢网络,经常自比网络的boy, 现在把我过去做的工具共享出来,希望给大家的工作与学习带来帮助. webtool自动生成数据库代码,支持mys ...

  9. java增删改一键生成_easyCode(java自动生成增删改查代码)

    [实例简介]读取数据库表结构 自动生成增删改查代码 [实例截图] [核心代码] package com.isoftstone.autocoding; import com.isoftstone.aut ...

最新文章

  1. 运动目标检测ViBe算法
  2. keepalived 高可用日志说明及实战配置日志路径
  3. 6个用于大数据分析处理的最好工具
  4. Spring源码编译及过程中的一些问题总结
  5. KVM虚拟化笔记(十三)------kvm虚拟机静态迁移
  6. opencv-contrib-python安装
  7. java环境变量设置优化_Mac/windows配置jdk环境变量-seo优化只选拉一八科技
  8. mysql 碎片率_计算MySQL表碎片的SQL整理
  9. Luogu P1197 [JSOI2008]星球大战
  10. 【CloudXNS教您几招】如何让多ip域名配置游刃有余?(2)
  11. 2.6 wpf标记扩展
  12. 三角传输的在链路均衡项目中的灵活应用
  13. Vue学习笔记之06-响应式的数组方法
  14. 利用python批量处理Word文件——正文、标题
  15. springboot问题记录
  16. 如何将PDF转换成可以直接编辑的CAD图纸
  17. DEA博弈交叉效率matlab,基于DEA/AR博弈交叉效率方法的学术期刊评价研究
  18. 【系统分析师之路】 第八章 复盘软件测试与维护(软件维护)
  19. windows注册表启动项
  20. 用于创建此对象的程序是 Equation。您的计算机尚未安装此程序或此程序无响应。 若要编辑此对象,请安装 Equation或确保 Equation中的任何对话框都已关闭

热门文章

  1. CMOS图像传感器中的噪声来源分析
  2. 华为分布式存储FusionStorage知识点总结【面试篇】
  3. java 生成随机编码_Java生成随机编码
  4. 初试401 英语86分上岸苏州大学经验分享
  5. 去掉图题注 空格_【转载】论文排版-Word插入题注时自动删除标签与编号前的空格,编号后添加空格...
  6. 文献翻译1:Oriented R-CNN for Object Detection
  7. 放弃csv,拥抱feather文件
  8. 【三石jQuery视频教程】03.创建垂直时间表(Timeline)
  9. scrapy框架下的豆瓣电影评论爬取以及登录,以及生成词云和柱状图
  10. AHB到标准握手时序桥 - 逻辑设计部分