java 农历的编写保存数据批量插入到数据库中

1.阴历转农历的工具类

public class Nongli {private static int monCyl, dayCyl, yearCyl;private static int year, month, day;private static boolean isLeap;private static String solarTerms = "";   //二十四节气private static Calendar offDate = Calendar.getInstance();private static int[] lunarInfo = { 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 };private static int[] solarMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31,30, 31 };private static String[] Gan = { "甲", "乙", "丙", "丁", "戊", "己", "庚", "辛","壬", "癸" };private static String[] Zhi = { "子", "丑", "寅", "卯", "辰", "巳", "午", "未","申", "酉", "戌", "亥" };private static String[] Animals = { "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊","猴", "鸡", "狗", "猪" };private static int[] sTermInfo = { 0, 21208, 42467, 63836, 85337, 107014,128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989,308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224,483532, 504758 };private static String[] nStr1 = { "日", "一", "二", "三", "四", "五", "六", "七","八", "九", "十" };private static String[] nStr2 = { "初", "十", "廿", "卅", "" };private static String[] monthNong = { "正", "正", "二", "三", "四", "五", "六","七", "八", "九", "十", "十一", "十二" };private static String[] yearName = { "零", "壹", "贰", "叁", "肆", "伍", "陆","柒", "捌", "玖" };private Object LogFactory;private static String[] SolarTerm ={ "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至","小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪","冬至" };final static long[] STermInfo = new long[] { 0, 21208, 42467, 63836, 85337, 107014, 128867, 150921, 173149, 195551,218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532,504758 };// ===== 某年的第n个节气为几日(从0小寒起算)final private static int sTerm(int y, int n) {offDate.set(1900, 0, 6, 2, 5, 0);long temp = offDate.getTime().getTime();offDate.setTime(new Date((long) ((31556925974.7 * (y - 1900) + STermInfo[n] * 60000L) + temp)));return offDate.get(Calendar.DAY_OF_MONTH);}// ******************计算节气**********//public static String getSolarTerms(int y,int m,int d){if (d == sTerm(y, (m - 1) * 2))solarTerms = SolarTerm[(m - 1) * 2];else if (d == sTerm(y, (m - 1) * 2 + 1))solarTerms = SolarTerm[(m - 1) * 2 + 1];elsesolarTerms = "";return solarTerms;}// ====================================== 传回农历 y年的总天数private static int lYearDays(int y) {int i;int sum = 348; // 29*12for (i = 0x8000; i > 0x8; i >>= 1) {sum += (lunarInfo[y - 1900] & i) == 0 ? 0 : 1; // 大月+1天}return (sum + leapDays(y)); // +闰月的天数}// ======================================传回农历y年闰月的天数private static int leapDays(int y) {if (leapMonth(y) != 0) {return ((lunarInfo[y - 1900] & 0x10000) == 0 ? 29 : 30);} else {return (0);}}// ====================================== 传回农历 y 年闰哪个月 1-12 , 没 闰传回 0private static int leapMonth(int y) {return (lunarInfo[y - 1900] & 0xf);}// ====================================== 传回农历 y 年 m 月的总天数private static int monthDays(int y, int m) {return ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0 ? 29 : 30);}// ====================================== 算出农历,传入日期物件,传回农历日期物件// 该物件属性有 .year .month .day .isLeap .yearCyl .dayCyl .monCylprivate static void Lunar1(Date objDate) {int i, leap = 0, temp = 0;Calendar cl = Calendar.getInstance();cl.set(1900, 0, 31); // 1900-01-31是农历1900年正月初一Date baseDate = cl.getTime();// 1900-01-31是农历1900年正月初一int offset = (int) ((objDate.getTime() - baseDate.getTime()) / 86400000);// 天 数 (86400000=24*60*60*1000)dayCyl = offset + 40; // 1899-12-21 是农历 1899 年腊月甲子日monCyl = 14; // 1898-10-01 是农历甲子月// 得到年数for (i = 1900; i < 2050 && offset > 0; i++) {temp = lYearDays(i); // 农历每年天数offset -= temp;monCyl += 12;}if (offset < 0) {offset += temp;i--;monCyl -= 12;}year = i; // 农历年份yearCyl = i - 1864; // 1864 年是甲子年leap = leapMonth(i); // 闰哪个月isLeap = false;for (i = 1; i < 13 && offset > 0; i++) {// 闰月if (leap > 0 && i == (leap + 1) && isLeap == false) {--i;isLeap = true;temp = leapDays(year);} else {temp = monthDays(year, i);}// 解除闰月if (isLeap == true && i == (leap + 1)) {isLeap = false;}offset -= temp;if (isLeap == false) {monCyl++;}}if (offset == 0 && leap > 0 && i == leap + 1) {if (isLeap) {isLeap = false;} else {isLeap = true;--i;--monCyl;}}if (offset < 0) {offset += temp;--i;--monCyl;}month = i; // 农历月份day = offset + 1; // 农历天份}private static int getYear() {return (year);}private static int getMonth() {return (month);}private static int getDay() {return (day);}private static int getMonCyl() {return (monCyl);}private static int getYearCyl() {return (yearCyl);}private static int getDayCyl() {return (dayCyl);}private static boolean getIsLeap() {return (isLeap);}// ============================== 传入 offset 传回干支 , 0= 甲子private static String cyclical(int num) {return (Gan[num % 10] + Zhi[num % 12]);}// ====================== 中文日期private static String cDay(int d) {String s;switch (d) {case 10:s = "初十";break;case 20:s = "二十";break;case 30:s = "三十";break;default:s = nStr2[(int) (d / 10)];// 取商s += nStr1[d % 10];// 取余}return (s);}private static String cYear(int y) {String s = " ";int d;while (y > 0) {d = y % 10;y = (y - d) / 10;s = yearName[d] + s;}return (s);}public static Holiday getLunar(String year, String month, String day) {SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");Date sDObj=null;try {sDObj=dateFormat.parse("2019-01-01");}catch (Exception e){e.printStackTrace();}String s;int SY, SM, SD;int sy;SY = Integer.parseInt(year);SM = Integer.parseInt(month);SD = Integer.parseInt(day);sy = (SY - 4) % 12;Calendar cl = Calendar.getInstance();cl.setTime(sDObj);cl.set(SY, SM - 1, SD+1);sDObj = cl.getTime();// 日期Lunar1(sDObj); // 农历s =cYear(getYear()) + "年" + " ";s += (getIsLeap() ? "闰" : "") + monthNong[getMonth()] + "月"+ (monthDays(getYear(), getMonth()) == 29 ? "小" : "大");s += cDay(getDay()) + " ";String solarTerms = Nongli.getSolarTerms(cl.get(Calendar.YEAR), cl.get(Calendar.MONTH) + 1, cl.get(Calendar.DAY_OF_MONTH));s = cyclical(getYearCyl()) + "年" + cyclical(getMonCyl()) + "月"+ cyclical(getDayCyl()) + "日"+cDay(getDay())+solarTerms;// System.out.println(solarTerms);Holiday holiday=new Holiday();holiday.setLunarYear(cyclical(getYearCyl())+"年");holiday.setLunarMonth(cyclical(getMonCyl())+"月");holiday.setLunarDay(cyclical(getDayCyl())+"日");holiday.setLunarDesc(cDay(getDay()));holiday.setSolarTerms(solarTerms);System.out.println(holiday.getLunarYear()+" "+holiday.getLunarMonth()+"  "+holiday.getLunarDay()+"   "+holiday.getLunarDesc()+holiday.getSolarTerms());return holiday;}public static void main(String[] args){System.out.println(getLunar("1990", "8", "26"));System.out.println(getLunar("2008", "6", "8"));System.out.println(getLunar("2009", "4", "3"));System.out.println(getLunar("2019", "01", "02"));System.out.println("-------------------------------------");}

Service层

   /*** 获取指定年份的星期六和星期日的日期的集合*/@Transactionalpublic List<Holiday> getDefaultHoliday(int year){Date date=new Date();// 该年的第一天Calendar firstDate = Calendar.getInstance();{firstDate.setTime(date);firstDate.set(Calendar.YEAR, year);firstDate.set(Calendar.MONTH, 0);firstDate.set(Calendar.DAY_OF_MONTH, 1);}List<Holiday> holidayList=new ArrayList<>();String showDate = null;boolean holiday_flag=false;  //是否休假// 得到所有的星期六和星期天for (int i = 1; i <= 12; i++) {while (firstDate.get(Calendar.MONTH) + 1 == i) {showDate = firstDate.get(Calendar.YEAR) + "-" + i + "-" + firstDate.get(Calendar.DAY_OF_MONTH);String[] dateArr = showDate.split("-");if (dateArr[1].length() == 1) {dateArr[1] = "0" + dateArr[1];}if (dateArr[2].length() == 1) {dateArr[2] = "0" + dateArr[2];}//每年的农历  月  日Holiday nongli=Nongli.getLunar(dateArr[0],dateArr[1],dateArr[2]);String newDate = dateArr[0] + "-" + dateArr[1] + "-" + dateArr[2];String dayName = "工作日";if (firstDate.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) {dayName = "星期一";holiday_flag = false;} else if (firstDate.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) {dayName = "星期二";holiday_flag = false;} else if (firstDate.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) {dayName = "星期三";holiday_flag = false;} else if (firstDate.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) {dayName = "星期四";holiday_flag = false;} else if (firstDate.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) {dayName = "星期五";holiday_flag = false;} else if (firstDate.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {dayName = "星期六";holiday_flag = true;} else if (firstDate.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {dayName = "星期日";holiday_flag = true;}nongli.setCode(showDate);nongli.setWeek(dayName);nongli.setMonthDays(Integer.parseInt(dateArr[2]));nongli.setHolidayDay(holiday_flag);//   System.out.println("YYY   "+nongli.getCode()+"   "+nongli.getLunarYear()+"  "+nongli.getLunarMonth()+"  "+nongli.getLunarDay());holidayList.add(nongli);firstDate.set(Calendar.DAY_OF_MONTH, firstDate.get(Calendar.DAY_OF_MONTH) + 1);}}return holidayList;}public static void main(String[] args) {HolidayService service=new HolidayService();service.autoYearsInfo("2018");}

controller层

 @RequestMapping("/findbymonth")public List<HolidayVO> findByMonth(@RequestParam("month") String month) {month = Preconditions.checkNotBlank(month);List<Holiday> holidayList = this.service.findByMonth(month);List<HolidayVO> voList = this.converter.do2vo(holidayList);return voList;}

数据库展示

java 农历的编写保存数据批量插入到数据库中相关推荐

  1. java jsonsql_java遍历解析json数据并插入到数据库中(MySQL)

    1.思路 读取json资源文件 File转化为JSON串 JSON串转对象集合 遍历插入到数据库 2.工具(jar包) 使用spring-core,fastjson,commons-io,mysql ...

  2. PHP将excel文件中的数据批量导入到数据库中

    2019独角兽企业重金招聘Python工程师标准>>> 这几天在做项目时,遇到了需要批量导入数据的情况,用户将excel表格提交后,需要我们后台这边将excel表格信息中的内容全部插 ...

  3. php excel批量导入,PHP将excel文件中的数据批量导入到数据库中

    这几天在做项目时,遇到了需要批量导入数据的情况,用户将excel表格提交后,需要我们后台这边将excel表格信息中的内容全部插入到数据表中.当然,前提是用户给我们的excel表格中的信息必须和我们表中 ...

  4. 将excel数据批量插入到数据库表中

    项目实例结构: 1.model实体类 package com.model;public class Test {private int num1;private String num2;private ...

  5. 每日定点将excel数据批量插入mysql数据库对应表

    最近在研究利用Metabase+MySQL实现excel数据的页面呈现,但excel数据每天需要手工上传真的很烦人,所以在网上参考各路大神,用Python实现了excel数据的每日自动上传至MySQL ...

  6. Java读取Excel表格中的数据并插入到数据库中

    这里写自定义目录标题 一.查看Excel表格 二.数据库中创建表 三.添加maven依赖 四.创建实体类 五.dao层接口添加新增方法 六.service层 1.service层接口 2.接口实现类 ...

  7. mysql 将xml插入数据库_从xml文档中读取数据并插入mysql数据库中

    // TODO: Add your control notification handler code here CMarkup xml; xml.Load("色谱案例表.xml" ...

  8. python爬虫数据无法插入到数据库中

    首先先贴上两张错误代码 其实这两处问题的重点都是数据类型转换出现错误,都是无法将list类型的数据转换成str. 第一处的解决方法先将list类型的数据强制转换成str,再在他的两侧添加引号 第二处, ...

  9. C#中几种数据库的大数据批量插入

    C#语言中对SqlServer.Oracle.SQLite和MySql中的数据批量插入是支持的,不过Oracle需要使用Orace.DataAccess驱动. IProvider里有一个用于实现批量插 ...

最新文章

  1. 【Linux】一步一步学Linux——who命令(95)
  2. 【目标检测】单阶段算法--YOLOv4详解
  3. 修改environment导致重启不能登录的问题解决
  4. zynq+linux固化程序,MiZ702学习笔记6——ZYNQ如何固化程序
  5. SqlServe零碎要点---sqlserver如何使用日期计算,DateTime类型的格式化以及语法格式等等。
  6. java并行计算π_3月14日圆周率日—使用并行计算求圆周率π
  7. 低频声音功率放大器电子设计报告
  8. 磁记录材料和计算机0101,信息磁性功能材料
  9. 二维数组在内存空间地址不一定连续
  10. CocosCreator中使用Animation制作动画
  11. PRA2020.4 平台 API 接口调用
  12. 关于VMware虚拟机安装失败的解决办法,报错(29142)或者安装系统后无法启动
  13. .NET获取硬盘序列号的几个方法
  14. 设计原则之壹——开闭原则
  15. PINQ-查询数据集-简介
  16. PHP实现word(office文件)转PDF的功能并添加水印
  17. 简化datax源码,以便于datax二次开发、调试
  18. umi——01——路由
  19. windows服务器迁到_windows服务器迁移linux服务器
  20. 【绿色】四步骤搞定专属PE系统

热门文章

  1. conn.connectiontimeout,conn.commandtimeout,command.commandtimeout?
  2. abp mysql 数据库 Failed executing DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='3
  3. 使用Tensorflow模仿HearthArena炉石卡片排名算法
  4. HTML + CSS 的一些技巧 (萌新来看!)
  5. python --图片合成视频
  6. U盘格式化后数据恢复【图文教程】
  7. 腾达虚拟服务器怎么设置,【2018最新】腾达虚拟服务器设置-word范文模板 (4页)...
  8. ant出现语法命令不正确
  9. delphi 安卓图片保存数据库_delphi数据库存储图片
  10. 电商加速进入“拼”时代