有时我们需要根据数据库中的日期,比如创建年月create_date,计算这条数据已经创建多久(多少年),
目前我们是在jdk1.7环境下开发的,就先以此举例
获取Date类型日期值
我们存在数据表中的数据类型是varchar,这里先做个转化,获取Date(java.util.Date)类的值
// 假设TimeUtils工具类提供的parseDate方法签名类似于:public static Date parseDate(String dateStr, String pattern)
public static Date convertStringToDate(String dateString) throws ParseException {
// 定义所有可能的日期格式
String[] patterns = {"yyyy/MM", "yyyy.MM", "yyyy-MM"};
// 遍历所有格式尝试解析
for (String pattern : patterns) {
try {
// 使用TimeUtils工具类的parseDate方法尝试解析
Date date = TimeUtils.parseDate(dateString, pattern);
if (date != null) {
return date;
}
} catch (ParseException ignored) {
// 如果当前格式不匹配,继续尝试下一个格式
}
}
// 如果所有格式都无法解析,抛出异常
throw new ParseException("无法解析日期字符串为Date对象", 0);
}
然后根据获取的Date值,计算跟当前日期相差多少年
public static int calculateYearsSince(Date inputDate) {
// 获取当前日期
Calendar currentDate = Calendar.getInstance();
int currentYear = currentDate.get(Calendar.YEAR);
int currentMonth = currentDate.get(Calendar.MONTH)+1; // 注意Java Calendar的月份是从0开始的
// 将输入的Date转换为Calendar以便获取年月信息
Calendar inputCalendar = Calendar.getInstance();
inputCalendar.setTime(inputDate);
int inputYear = inputCalendar.get(Calendar.YEAR);
int inputMonth = inputCalendar.get(Calendar.MONTH);
// 计算相差的完整月份数
int monthsDiff = (currentYear - inputYear) * 12 + (currentMonth - inputMonth);
// 根据相差月份判断年份
return monthsDiff <6 ?0:(monthsDiff + 6) / 12; // 向上取整,保证超过半年算一年
测试
public static void main(String[] args) throws Exception {
// 假设输入的日期字符串格式为"yyyy-MM"
Date inputDate = convertStringToDate("2010-01");
int yearsSince = calculateYearsSince(inputDate);
System.out.println("距离 " + sdf.format(inputDate) + " 已经过了大约 " + yearsSince + " 年");
}