在维护项目的时候碰到前辈很多不错的写法,这里记录一下,为以后的开发省时省力。
1.计算年龄
很多时候表会有出生日期字段,但是我们又需要计算他们的年龄进行展示的时候,可以采用在类里冗余一个age字段,然后在get方法中根据出生日期完成年龄计算。
@Data
@TableName("sys_user")
public class SysUser{
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@TableId(value = "id", type = IdType.UUID)
private String id;
/**
* 头像
*/
@TableField("AVATAR")
private String avatar;
/**
* 账号
*/
@TableField(name = "ACCOUNT",)
private String account;
/**
* 密码
*/
@TableField("PASSWORD")
private String password;
/**
* 出生日期
*/
@TableField("BIRTHDAY")
private String birthday;
/**
* 年龄
*/
@TableField(exist = false)
private int age;
public int getAge() {
//这个就是为空判断
if (ToolUtil.isNotEmpty(birthday)) {
return DateTimeKit.ageOfNow(birthday);
}
return age;
}
}
有一个计算年龄的工具类
public class DateTimeKit {
/**
* 生日转为年龄,计算法定年龄
* @param birthDay 生日
* @return 年龄
* @throws Exception
*/
public static int ageOfNow(Date birthDay) {
return age(birthDay,date());
}
/**
* 计算相对于dateToCompare的年龄,长用于计算指定生日在某年的年龄
* @param birthDay 生日
* @param dateToCompare 需要对比的日期
* @return 年龄
* @throws Exception
*/
public static int age(Date birthDay, Date dateToCompare) {
Calendar cal = Calendar.getInstance();
cal.setTime(dateToCompare);
if (cal.before(birthDay)) {
throw new IllegalArgumentException(StrKit.format("Birthday is after date {}!", formatDate(dateToCompare)));
}
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
cal.setTime(birthDay);
int age = year - cal.get(Calendar.YEAR);
int monthBirth = cal.get(Calendar.MONTH);
if (month == monthBirth) {
int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
if (dayOfMonth < dayOfMonthBirth) {
//如果生日在当月,但是未达到生日当天的日期,年龄减一
age--;
}
} else if (month < monthBirth){
//如果当前月份未达到生日的月份,年龄计算减一
age--;
}
return age;
}
}
2.子标题
正文
在这里插入代码片
3.子标题
正文
在这里插入代码片
4.子标题
正文
在这里插入代码片
5.子标题
正文
在这里插入代码片