判断闰年,公历转农历完整项目

一、前言

这段时间在看SSM框架和Maven,网上有很多整合的项目,自己也想从零开始搭建一个项目,于是就有了这样一个判断是否闰年,并且可以将阳历转换成农历的项目(主要是框架的练习)。

二、框架的搭建

开发环境:myeclipse2017、JDK1.8、tomcat9
1、创建项目:new -> maven project,选择打包方式war,在项目建好后,缺的WEBROOT引入可以参考https://blog.csdn.net/cold_blooder/article/details/80208583。然后再里面创建各个文件,目录以下:
在这里插入图片描述
controller用来接收前台浏览器发出的请求
service用来处理业务逻辑
dao用来操作数据库(为了项目完整性,查询的数据存入数据库,其实整个项目都可以不用数据库)
po为实体类
util为逻辑处理的核心算法

com.mybatis中放操作数据库的配置文件,对应于dao包中的类
applicationContext.xml为spring核心配置文件,包括数据库的连接,事务管理,对mybatis的整合
log4j.properties是日志配置
mybatis-config.xml是mybatis的配置文件,其中有对po类的重命名,和mapper.xml的管理
spring-mvc.xml是springMVC的配置文件

对pom.xml的配置,可以参考https://www.cnblogs.com/xk920/p/9883669.html
框架搭好后,页面可以正常跳转。

三、业务逻辑

判断是否闰年很简单,一句代码LocalDate.isLeapYear();,这句判断就放在service中,另外阳历转农历,大家可以参考https://blog.csdn.net/mexican_jacky/article/details/51537571,写的方法基本够用,我稍微改了一下,输入输出格式符合项目要求。贴上阳历转农历方法。

public static Record SolarToLunar(LocalDate localdatesolar) {
		DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
		String stringsolar = localdatesolar.format(fmt);
		//String solar = "2019-01-01";
		String[] ymd = stringsolar.split("-");
		int solarYear = Integer.parseInt(ymd[0]);
		int solarMonth = Integer.parseInt(ymd[1]);
		int solarDay = Integer.parseInt(ymd[2]);
		
		int index = solarYear - solar_1_1[0];
		int data = (solarYear << 9) | (solarMonth << 5) | (solarDay);
		int solar11 = 0;
		if (solar_1_1[index] > data) {
			index--;
		}
		solar11 = solar_1_1[index];
		int y = GetBitInt(solar11, 12, 9);
		int m = GetBitInt(solar11, 4, 5);
		int d = GetBitInt(solar11, 5, 0);
		long offset = SolarToInt(solarYear, solarMonth, solarDay) - SolarToInt(y, m, d);
 
		int days = lunar_month_days[index];
		int leap = GetBitInt(days, 4, 13);
 
		int lunarY = index + solar_1_1[0];
		int lunarM = 1;
		int lunarD = 1;
		offset += 1;
 
		for (int i = 0; i < 13; i++) {
			int dm = GetBitInt(days, 1, 12 - i) == 1 ? 30 : 29;
			if (offset > dm) {
				lunarM++;
				offset -= dm;
			} else {
				break;
			}
		}
		lunarD = (int) (offset);
		int lunarYear = lunarY;
		int lunarMonth = lunarM;
		
		boolean isleap = false;
		if (leap != 0 && lunarM > leap) {
			lunarMonth = lunarM - 1;
			if (lunarM == leap + 1) {
				isleap = true;
			}
		}
		String stringMonth = "";
		if(lunarMonth<10){
			stringMonth = "0"+lunarMonth;
		}else{
			stringMonth = String.valueOf(lunarMonth);
		}
		Record record = new Record();
		if(isleap==true){record.setLtag(1);}
		else{record.setLtag(0);}
 
		int lunarDay = lunarD;
		String stringDay = "";
		if(lunarDay<10){
			stringDay = "0"+lunarDay;
		}else{
			stringDay = String.valueOf(lunarDay);
		}
		//System.out.println(String.valueOf(lunarYear)+String.valueOf(lunarMonth)+String.valueOf(lunarDay));
		String str = String.valueOf(lunarYear)+'-'+stringMonth+'-'+stringDay;
		LocalDate lunar = LocalDate.parse(str, fmt);
		record.setLunar(lunar);
		return record;
	}

四、单元测试

这里做了对service和util的测试,由于service调用了dao,这里就没有单独对dao测试
在这里插入图片描述
单元测试没问题后,数据都能展现在前端页面上了。

五、前端

这里用到了bootstrap框架做为前端框架,并且用到了datetimepicker 日期插件。最后前端的样子。
在这里插入图片描述
选择了日期后,输出结果
在这里插入图片描述

六、结语

一个很简单的实现,熟悉了SSM+Maven+bootstrap,当然涉及到的知识还有很多很细的地方,今后再动手实践。(由于逻辑比较简单,文中的测试是后加上去的。切记切记!!!要测试)。
整个项目下载链接:https://pan.baidu.com/s/1ZVREg23QCUICHE9GKF3agA
提取码:4m0m

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值