推荐使用 localdate + chronounit.days.between() 计算自然日工期,结果为 end - start 的天数差(含起不含止),需包含首尾则加1;工作日需过滤周六日;带时刻用 localdatetime + duration;注意日期类型匹配与起止顺序。

Java 中计算项目工期天数,推荐使用 java.time 包中的类(Java 8+),避免老式 Date 和 Calendar 的易错与线程安全问题。核心是用 LocalDate 表示起止日期,再通过 ChronoUnit.DAYS.between() 获取**自然日天数**(含起不含止,或可按需调整)。
用 LocalDate + ChronoUnit 计算自然日工期
适用于“从开工日到完工日一共过了多少天”这类场景,不区分工作日/节假日,只看日历天数。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 起止日期都用
LocalDate,确保无时分秒干扰 -
ChronoUnit.DAYS.between(start, end)返回的是 end - start 的天数差,结果为正表示 end 在 start 之后 - 该方法默认包含起始日、不包含结束日(即:start=2024-01-01, end=2024-01-04 → 结果为 3)
- 若需“包含首尾两天”,可加 1:
ChronoUnit.DAYS.between(start, end) + 1
LocalDate start = LocalDate.of(2024, 1, 10); LocalDate end = LocalDate.of(2024, 2, 5); long days = ChronoUnit.DAYS.between(start, end); // 结果:26(1月10日~2月5日,不含2月5日) long daysInclusive = days + 1; // 27 天(含1月10日和2月5日)
排除周末的工期计算(简单工作日逻辑)
如需统计实际工作日(周一至周五),可遍历日期范围并过滤掉周六、周日。
- 用
LocalDate::getDayOfWeek()判断星期几(返回DayOfWeek枚举) - 跳过
SATURDAY和SUNDAY - 注意:此方式未考虑法定节假日,如需支持,需额外维护节假日列表
long workDays = start.datesUntil(end.plusDays(1))
.filter(d -> d.getDayOfWeek() != DayOfWeek.SATURDAY &&
d.getDayOfWeek() != DayOfWeek.SUNDAY)
.count();
处理带时间的工期(如精确到小时)
若项目起止含具体时刻(例如 2024-01-10T09:00 和 2024-02-05T17:30),应改用 LocalDateTime 或 ZonedDateTime。
- 用
Duration.between()得到Duration对象,再转为天数:duration.toDays()(只取整数天) - 如需总小时/分钟,可用
toHours()或toMinutes() - 注意:
Duration不感知时区,跨夏令时等场景建议用ZonedDateTime
LocalDateTime start = LocalDateTime.of(2024, 1, 10, 9, 0); LocalDateTime end = LocalDateTime.of(2024, 2, 5, 17, 30); Duration duration = Duration.between(start, end); long totalDays = duration.toDays(); // 26 long totalHours = duration.toHours(); // 641
注意事项与常见坑
- 别混用
LocalDate和Instant:前者无时区无时间,后者是时间戳,直接计算会抛异常 - 解析字符串时用
DateTimeFormatter,避免系统默认格式导致解析失败 - 数据库读写日期时,确认 JDBC 驱动版本是否支持
LocalDate(建议 4.2+) - 工期为负数?检查起止顺序——
between(a,b)要求 a ≤ b,否则返回负值
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










