项目心得(二)

今天修改了项目中的标准器的添加方法,将检定时间设置为一年后.内容虽少,但对于编程起步的我,依然收货不小.

问题描述

标准器实体中,有一个字段是 检定有效期至,也就是下一次检定日期,检定的周期是一年,所以,在新增一个标准器的时候,要将该字段设置为一年以后.

实现构想

由于有上一次的经验,所以知道可以很容易的获取系统时间,然后将年份加一,月和日不变,这样就将 检定有效期至 设为一年以后.

初步解决

有了上面的构想,代码实现就比较简单了.直接利用 calendar 类来帮助获取当前时间,进而获取年月日.

1
2
3
4
5
6
7
8
9
10
11
12
logger.debug("获取当前年月日");
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR) + 1 - 1900;
int mounth = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
logger.debug("将下次检定日期设置为一年后");
Date date = new Date(year,mounth,day);
standardDevice.setNextCheckDate(date);
logger.debug("持久化");
return standardDeviceRepository.save(standardDevice);

这里需要解释一下的是,利用calendar类得到的对象和项目中的关键子类型不同,所以中间将年月日取出来进行了拼接,得到需要的类型.
Date() 这个构造函数的参数一个参数- year ,它的范围是0-8099,0代表1900年,所以上面的年份减去了一个1900.

代码重构

显然,上面的代码并不够简介,而且也并不容易理解.时间一久,这个代码是怎么回事,可能自己还要想上好半天.怎么办?重构!

首先, calendar 这个类有一个 add 函数,它可以直接实现年份加一,所以,不用将年份获取出来再加一了;

1
calendar.add(Calendar.YEAR, 1);

其次, calendar 对象的 getTimeInMillis函数,可以直接将Calendar类型转换为我们需要的类型,所以,已不用费劲的拼接了.

1
calendar.getTimeInMillis()

重构后的代码:

1
2
3
4
logger.debug("将下次检定日期设置为一年后");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.YEAR, 1);
standardDevice.setNextCheckDate(new Date(calendar.getTimeInMillis()));

很明显,重构后的代码比开始的代码更加简介,更加便于理解与维护.

总结

这次暴露的主要问题是,对于 java 这门语言的使用还不够熟练,所以开始使用方法错误.

这次的主要收获:

1.好的代码要简洁,要易于理解.

2.对于编程语言的熟练度,影响你解决问题的速度.

3.多尝试看官方API文档.

关于calendar类的官方文档参考:https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html

坚持原创技术分享,您的支持将鼓励我继续创作!