用Java jdk 1.8 代码计算2个时间之间相差了几年几个月几天,返回结果是字符串的形式。下面是实现代码,测试代码,测试结果截图,代码分享链接。

    /** 
     * 格式化2个时间的间隔 
     * 
     * @param start 开始时间 
     * @param end   结束时间 
     * @return 两个时间之间的间隔 
     */ 
    public static String between(LocalDate start, LocalDate end) { 
        long betweenDay = end.toEpochDay() - start.toEpochDay(); 
        if (betweenDay < 0) { 
            return "开始时间大于结束时间,所传参数不OK。。。。"; 
        } 
 
        int year = end.getYear() - start.getYear(); 
        int month = end.getMonth().getValue() - start.getMonth().getValue(); 
        int day = end.getDayOfMonth() - start.getDayOfMonth(); 
 
        if (day < 0) { 
            month = month - 1; 
            boolean leapYear = end.getYear() % 4 == 0; 
            if (end.getMonth() == Month.JANUARY) { 
                leapYear = (end.getYear() - 1) % 4 == 0; 
            } 
            day = day + end.getMonth().minus(1).length(leapYear); 
        } 
 
        if (month < 0) { 
            year = year - 1; 
            month = month + 12; 
        } 
 
        StringBuilder stringBuilder = new StringBuilder(); 
        if (year > 0) { 
            stringBuilder.append(year).append(" 年 "); 
        } 
        if (month > 0) { 
            stringBuilder.append(month).append(" 月 "); 
        } 
        if (day > 0) { 
            stringBuilder.append(day).append(" 天"); 
        } 
        return stringBuilder.toString(); 
    }

实际测试代码:

/** 
 * 计算2个时间相差多久 
 * 
 * @author LiXuekai on 2019/9/10 
 */ 
public class GetBetweenDaysTest { 
    private LocalDate start; 
    private LocalDate end; 
 
    @Before 
    public void init() { 
        end = LocalDate.now(); 
    } 
 
    /** 
     * 测试这个util方法OK不 
     */ 
    @Test 
    public void test() { 
        // 边界测试 
        end = LocalDate.of(2020, 3, 1); 
        start = LocalDate.of(2020, 2, 29); 
        System.out.println(TimeUtils.between(start, end)); 
    } 
}

测试结果截图:

代码分享地址链接:

代码的GitHub上的链接地址


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Java 中的伪共享详解