Java计算两个日期相差的年数、月数、天数

本文介绍了如何使用Hutool库的DateUtil类以及Java8的ChronoUnit和LocalDateAPI来实现日期之间的年、月、日和时间单位的计算,展示了两种不同版本的日期处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 借助hutool工具类

hutool maven依赖

<dependency>
             <groupId>cn.hutool</groupId>
             <artifactId>hutool-all</artifactId>
             <version>5.1.0</version>
         </dependency>

代码实现:

 System.out.println("------- year --------------");
        Date startDateYear = new Date(1553443200000L);
        Date endDateYear = new Date(System.currentTimeMillis());
        // 返回相差年数
        long betweenYear = DateUtil.betweenYear(startDateYear, endDateYear, true);
        System.out.println(betweenYear);
        System.out.println("------- month --------------");
        Date startDate = new Date(1553443200000L);
        Date endDate = new Date(System.currentTimeMillis());
        // 返回相差月数
        long betweenMonth = DateUtil.betweenMonth(startDate, endDate, true);
        System.out.println(betweenMonth);
        System.out.println("------- day --------------");
        Date startDateDay = new Date(1553443200000L);
        Date endDateDay = new Date(System.currentTimeMillis());
        // 返回相差天数
        long betweenDay = DateUtil.betweenDay(startDateDay, endDateDay, true);
        System.out.println(betweenDay);
        System.out.println("------- MS --------------");
        Date startDateMs = new Date(1553443200000L);
        Date endDateMs = new Date(System.currentTimeMillis());
        // 返回相差毫秒数
        long betweenMs = DateUtil.betweenMs(startDateMs, endDateMs);
        System.out.println(betweenMs);

通过枚举传参形式实现,包括 week、day、hour、minute、second、ms

Date startDate = new Date(1553443200000L);
        Date endDate = new Date(System.currentTimeMillis());
        // DateUnit.DAY 枚举
        long between = DateUtil.between(startDate, endDate, DateUnit.DAY);
        System.out.println(between);

DateUnit 代码实现:

/**
 * 日期时间单位,每个单位都是以毫秒为基数
 * @author Looly
 *
 */
public enum DateUnit {
    /** 一毫秒 */
    MS(1), 
    /** 一秒的毫秒数 */
    SECOND(1000), 
    /**一分钟的毫秒数 */
    MINUTE(SECOND.getMillis() * 60),
    /**一小时的毫秒数 */
    HOUR(MINUTE.getMillis() * 60),
    /**一天的毫秒数 */
    DAY(HOUR.getMillis() * 24),
    /**一周的毫秒数 */
    WEEK(DAY.getMillis() * 7);
    
    private long millis;
    DateUnit(long millis){
        this.millis = millis;
    }
    
    /**
     * @return 单位对应的毫秒数
     */
    public long getMillis(){
        return this.millis;
    }
}

 

2  java8实现     

String text1 = "2019-03-25";
        Temporal startDate = LocalDate.parse(text1);
        String text2 = "2022-05-30";
        Temporal endDate = LocalDate.parse(text2);
        System.out.println("------- year --------------");
        // 方法返回为相差年数
        long years = ChronoUnit.YEARS.between(startDate, endDate);
        System.out.println(years);
        System.out.println("------- month --------------");
        // 方法返回为相差月数
        long months = ChronoUnit.MONTHS.between(startDate, endDate);
        System.out.println(months);
        System.out.println("------- day --------------");
        // 方法返回为相差天数
        long days = ChronoUnit.DAYS.between(startDate, endDate);
        System.out.println(days);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值