java:获取两个日期相隔天数

本文介绍了一种使用Java计算两个日期间相差天数的方法,通过LocalDateTime和Calendar两种方式实现,并对比了它们的计算结果。

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

java:获取两个日期相隔天数

1 LocalDateTime使用

package com.xiaoxu.tool.demo;

import org.springframework.lang.NonNull;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;

/**
 * @author xiaoxu
 * @date 2022-09-26
 * spring_boot:com.xiaoxu.tool.demo.DateUtilDemo
 */
public class DateUtilDemo {
    private static final String pattern = "yyyyMMdd";

    private static final ThreadLocal<SimpleDateFormat> sdf = ThreadLocal.withInitial(()-> new SimpleDateFormat(pattern));

    public static long getDiffDays(@NonNull Date date1, @NonNull Date date2){
        LocalDateTime l1 = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        System.out.println(l1);
        LocalDateTime l2 = date2.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        System.out.println(l2);
        if(l1.isAfter(l2)){
            System.out.println("l1在l2后面");
            LocalDateTime temp;
            temp = l2;
            l2 = l1;
            l1 = temp;
        }else{
            System.out.println("l1在l2前面");
        }
        Duration between = Duration.between(l1, l2);
        System.out.println("天数:"+between.toDays());
        return between.toDays();
    }

    public static Date parseDateStr(String dateStr){
        if(dateStr.length()!=pattern.length()){
            throw new RuntimeException("日期格式有误,"+dateStr);
        }
        Date d = null;
        try {
            d = sdf.get().parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return d;
    }

    public static void main(String[] args) {
        getDiffDays(parseDateStr("20220801"),parseDateStr("20220901"));
        getDiffDays(parseDateStr("20220902"),parseDateStr("20220801"));
    }

}

执行结果:

2022-08-01T00:00
2022-09-01T00:00
l1在l2前面
天数:31
2022-09-02T00:00
2022-08-01T00:00
l1在l2后面
天数:32

2 Calendar和LocalDateTime比对使用

package com.xiaoxu.tool.demo;

import org.springframework.lang.NonNull;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;

/**
 * @author xiaoxu
 * @date 2022-09-26
 * spring_boot:com.xiaoxu.tool.demo.DateUtilDemo
 */
public class DateUtilDemo {
    private static final String pattern = "yyyyMMdd";

    private static final ThreadLocal<SimpleDateFormat> sdf = ThreadLocal.withInitial(()-> new SimpleDateFormat(pattern));


    public static long getDiffDaysByCalendar(@NonNull Date date1, @NonNull Date date2){
        if(date1.after(date2)){
            Date temp;
            temp = date2;
            date2 = date1;
            date1 = temp;
        }
        Calendar start = Calendar.getInstance();
        Calendar end = Calendar.getInstance();
        start.setTime(date1);
        end.setTime(date2);
//        int da1 = start.getActualMaximum(Calendar.DAY_OF_YEAR);
//        int da3 = start.get(Calendar.DAY_OF_YEAR);
//        int da2 = end.getActualMaximum(Calendar.DAY_OF_YEAR);
//        int da4 = end.get(Calendar.DAY_OF_YEAR);
//        System.out.println(da1);
//        System.out.println(da3);
//
//        System.out.println(da2);
//        System.out.println(da4);
        int endYear = end.get(Calendar.YEAR);
        int startYear = start.get(Calendar.YEAR);
        int sub = endYear - startYear;

        int days = end.get(Calendar.DAY_OF_YEAR)-start.get(Calendar.DAY_OF_YEAR);
        while(sub>0){
            days += start.getActualMaximum(Calendar.DAY_OF_YEAR);
            start.add(Calendar.YEAR,1);
            sub-=1;
        }
        System.out.println("Calendar计算出的天数:"+days);
        return days;
    }

    public static long getDiffDays(@NonNull Date date1, @NonNull Date date2){
        LocalDateTime l1 = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
//        System.out.println(l1);
        LocalDateTime l2 = date2.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
//        System.out.println(l2);
        if(l1.isAfter(l2)){
            System.out.println("l1在l2后面");
            LocalDateTime temp;
            temp = l2;
            l2 = l1;
            l1 = temp;
        }else{
            System.out.println("l1在l2前面");
        }
        Duration between = Duration.between(l1, l2);
        System.out.println("LocalDateTime计算出的天数:"+between.toDays());
        return between.toDays();
    }

    public static Date parseDateStr(String dateStr){
        if(dateStr.length()!=pattern.length()){
            throw new RuntimeException("日期格式有误,"+dateStr);
        }
        Date d = null;
        try {
            d = sdf.get().parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return d;
    }

    public static void main(String[] args) {
        getDiffDays(parseDateStr("20220801"),parseDateStr("20220901"));
        getDiffDays(parseDateStr("20220902"),parseDateStr("20220801"));
        System.out.println("********************************");

        getDiffDaysByCalendar(parseDateStr("20220801"),parseDateStr("20220901"));
        getDiffDays(parseDateStr("20220801"),parseDateStr("20220901"));
        System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
        getDiffDaysByCalendar(parseDateStr("20220102"),parseDateStr("20210801"));
        getDiffDays(parseDateStr("20220102"),parseDateStr("20210801"));
        System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
        getDiffDaysByCalendar(parseDateStr("20220902"),parseDateStr("20210801"));
        getDiffDays(parseDateStr("20220902"),parseDateStr("20210801"));
        System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
        getDiffDaysByCalendar(parseDateStr("20220902"),parseDateStr("20040801"));
        getDiffDays(parseDateStr("20220902"),parseDateStr("20040801"));
        System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
        getDiffDaysByCalendar(parseDateStr("20200902"),parseDateStr("20040801"));
        getDiffDays(parseDateStr("20200902"),parseDateStr("20040801"));
        System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
        getDiffDaysByCalendar(parseDateStr("20200902"),parseDateStr("20050801"));
        getDiffDays(parseDateStr("20200902"),parseDateStr("20050801"));
        System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
        getDiffDaysByCalendar(parseDateStr("20200902"),parseDateStr("20200906"));
        getDiffDays(parseDateStr("20200902"),parseDateStr("20200906"));
    }

}

执行结果如下:

l1在l2前面
LocalDateTime计算出的天数:31
l1在l2后面
LocalDateTime计算出的天数:32
********************************
Calendar计算出的天数:31
l1在l2前面
LocalDateTime计算出的天数:31
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Calendar计算出的天数:154
l1在l2后面
LocalDateTime计算出的天数:154
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Calendar计算出的天数:397
l1在l2后面
LocalDateTime计算出的天数:397
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Calendar计算出的天数:6606
l1在l2后面
LocalDateTime计算出的天数:6606
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Calendar计算出的天数:5876
l1在l2后面
LocalDateTime计算出的天数:5876
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Calendar计算出的天数:5511
l1在l2后面
LocalDateTime计算出的天数:5511
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Calendar计算出的天数:4
l1在l2前面
LocalDateTime计算出的天数:4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值