Java计算两个时间相差多少年

有时我们需要根据数据库中的日期,比如创建年月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 + " 年");
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

见未见过的风景

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值