在 Java 开发中,处理时间差异是高频需求。无论是计算项目周期、会员有效期还是日志分析,准确的时间差计算都至关重要。虽然 Java 8 之后引入了 java.time API,但在维护旧系统或特定场景下,传统的 Calendar 和 Date 类依然广泛使用。这里分享两种经典实现方案,代码可直接运行参考。
场景一:基于当前时间的相对推算
很多时候我们需要知道 N 天后是什么时间,或者 M 周后的日期。利用 Calendar 的 set 方法可以方便地修改日期字段。
import java.util.Calendar;
import java.util.Date;
public class TimeDiffDemo {
public static void main(String[] args) {
// 演示增加天数
Calendar now = Calendar.getInstance();
System.out.println("当前时间:" + new Date());
int daysToAdd = 280;
now.set(Calendar.DATE, now.get(Calendar.DATE) + daysToAdd);
System.out.println(daysToAdd + "天后的时间:" + now.getTime());
// 演示增加周数
Calendar nextMonth = Calendar.getInstance();
int weeksToAdd = 37;
nextMonth.set(Calendar.DATE, nextMonth.get(Calendar.DATE) + (weeksToAdd * 7));
System.out.println(weeksToAdd + "周后的时间:" + nextMonth.getTime());
}
}
这里要注意,Calendar 是基于本地时区的,如果涉及跨时区业务,建议后续迁移到 ZonedDateTime。另外,直接操作 DATE 字段在某些极端情况下(如月末)可能会自动进位,通常这正是我们想要的行为。
场景二:两个固定日期的差值计算
如果是比较两个历史时间点,比如从 2018-03-01 到 2018-03-12 到底隔了多少天、多少小时,核心思路是将时间转换为毫秒数进行减法运算。

