java获取时间天数间隔

写在前面

java涉及时间比较及差值计算的无非就是Date 、SimpleDateFormat、Calendar三个类,但都没有包含纯粹计算天数差值的方法,要么就是跟业务不匹配(明面上计算的天数,只考虑日期间隔,忽略具体时间的影响),这里记录下在业务需求中获取时间(天数)差值的方案;

jdk8 之后版本的实现方式(这个实现方式只能计算当月间隔,已废弃)

    public Integer getDayInterval(Date start, Date end){
        LocalDateTime startLocalDateTime = LocalDateTime.ofInstant(start.toInstant(), ZoneId.systemDefault());
        LocalDateTime endLocalDateTime = LocalDateTime.ofInstant(end.toInstant(), ZoneId.systemDefault());
        return Period.between(startLocalDateTime.toLocalDate(), endLocalDateTime.toLocalDate()).getDays();
    }

jdk8之前版本实现方式

    public Integer getDayInterval(Date start, Date end){
        final long nd = 1000 * 24 * 60 * 60;
        Date startDay = new Date(start.getTime() - start.getTime() % nd);
        Date endDay = new Date(end.getTime() - end.getTime() % nd);
        return (int)((endDay.getTime() - startDay.getTime())/nd);
    }
### Java 计算两个时间戳之间相差多少天 在Java中,为了精确计算两个时间戳之间的天数差异,可以采用多种方式。一种常见且高效的方法是利用`java.time.Duration` 和 `java.time.Instant`类来处理这个问题[^1]。 对于较新的Java版本(Java 8及以上),推荐使用内置的时间API来进行此类操作: ```java import java.time.Duration; import java.time.Instant; public class TimeDifference { public static void main(String[] args) { long timestamp1 = Instant.parse("2023-04-15T00:00:00Z").toEpochMilli(); long timestamp2 = Instant.now().toEpochMilli(); Duration duration = Duration.ofMillis(Math.abs(timestamp2 - timestamp1)); long daysBetween = duration.toDays(); System.out.println(daysBetween); } } ``` 上述代码片段展示了如何定义两个时间戳并计算它们之间的绝对差值,最后将此差值转换成天数的形式输出。 另一种传统的方式适用于所有Java版本,即直接基于毫秒级别的计算: ```java public class DayDifference { public static int getDayDifference(long startTime, long endTime){ long differenceInTime = Math.abs(endTime - startTime); return (int)(differenceInTime / (1000 * 60 * 60 * 24)); } public static void main(String[] args) { long startTimestamp = 1617235200000L; // Example Start Timestamp long endTimestamp = 1648876800000L; // Example End Timestamp System.out.println(getDayDifference(startTimestamp,endTimestamp)); } } ``` 这段程序通过除以一天内的毫秒总数(1000*60*60*24),从而得到两时间戳间的整天数量[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值