一、前言
这段时间在看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