用Date计算日期相差多少天

本文介绍了如何使用Java中的LocalDate和ChronoUnit类更准确地计算两个日期之间的天数差,避免了SimpleDateFormat在计算时因不满24小时导致的误差。方法一是针对Android 8.0及以上版本,通过将Date转换为LocalDate并使用ChronoUnit.DAYS.between()方法。方法二是在计算前将日期时间设为0点,确保完整天数的计算。这两种方法提供了更精确的日期间隔计算方案。

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

一、需求
在网上看到用SimpleDateFormat类计算相差天数

 SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
    /*天数差*/
    Date fromDate1 = simpleFormat.parse("2018-03-01 12:00");  
    Date toDate1 = simpleFormat.parse("2018-03-12 12:00");  
    long from1 = fromDate1.getTime();  
    long to1 = toDate1.getTime();  
    int days = (int) ((to1 - from1) / (1000 * 60 * 60 * 24));  
    System.out.println("两个时间之间的天数差为:" + days);

因为我只是计算日期间相差多少天,可是用这个方法,如果没有满24小时,相差的天数就不算一天,这就不符合我的要求
后来,我知道了ChronoUnit类,用LocalDate来计算天数
LocalDate不包括时间,只是单纯的年月日

二、实现步骤
方法一:
(这个方法只能在Android8以上才能用)
选择一个Date类型的年月日,将其转化成对应的LocalDate,然后用LocalDate.now获取今天的年月日,接着用ChronoUnit.DAYS.between(startDate, endDate);
来计算
这是endDate减去starDate,

val todayLocalDate = LocalDate.now()
            //获取日期框中localdate的值
            val selectLocalDate = CustomDateFormat.dateToLocalDate(tvDate)
            //如:选中10月30日,今日为10月29日,则选中减去今日,差值为1
            val differDays= ChronoUnit.DAYS.between(todayLocalDate,selectLocalDate).toInt()

@RequiresApi(Build.VERSION_CODES.O)
        fun dateToLocalDate(date: Date): LocalDate {
            val instance = date.toInstant()
            val zoneId = ZoneId.systemDefault()
            return instance.atZone(zoneId).toLocalDate()
        }

方法二:
将日期后面的时间全设为0点,这样就不会有不满二十四小时无法算一天的情况了

//某天到今天共有多少天(某天,今天都算在内)
    public static int intervalsDates(String dateString2) {
        Date date = Calendar.getInstance().getTime();
        java.text.DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date date1 = null;
        Date date2 = null;
        try {
            date1 = format.parse(format.format(date)+" 00:00:00");
            date2 = format.parse(dateString2+" 00:00:00");
        } catch (ParseException e) {
            e.printStackTrace();
        }
        long interval = (date2.getTime() - date1.getTime()) / (1000*3600*24);
        if (interval<0){
            interval = interval*(-1);
        }
        int dates = (int) (interval+1);
        return dates;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值