You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 8如何获取无时间成分的次日Date实例?

解决Java 8中获取次日0点Date实例的问题

嘿,这个需求我之前踩过类似的坑,给你两种适配Java 8环境的靠谱方案:

方案一:改进你原来的Calendar用法

你之前的代码只实现了“加一天”,但没对时间部分做清零操作,只需要在加完一天后,把时、分、秒、毫秒都设为0就行:

Calendar calendar = Calendar.getInstance();
// 先给当前日期加一天
calendar.add(Calendar.DAY_OF_YEAR, 1);
// 清零时间部分:时、分、秒、毫秒全设为0
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
// 得到时间全为0的次日Date
Date tomorrow = calendar.getTime();

这里注意用Calendar.HOUR_OF_DAY(24小时制)而不是Calendar.HOUR(12小时制),避免出现上午/下午的混淆问题。

方案二:使用Java 8推荐的java.time新API

Java 8引入的java.time包彻底解决了旧日期API的各种坑(比如线程不安全、API设计混乱),用它来实现需求更简洁清晰:

// 1. 获取当前仅含年月日的LocalDate
LocalDate today = LocalDate.now();
// 2. 直接加一天得到次日的LocalDate
LocalDate tomorrowLocalDate = today.plusDays(1);
// 3. 把LocalDate转为Date实例:指定时区,将日期转为当天0点的Instant再转Date
Date tomorrow = Date.from(
    tomorrowLocalDate.atStartOfDay(ZoneId.systemDefault())
                     .toInstant()
);

atStartOfDay()方法会自动把时间部分设为00:00:00,完全符合你的需求,而且代码逻辑一目了然。

如果你后续有更多日期处理需求,优先用java.time包的类(比如LocalDate、LocalDateTime、ZonedDateTime等),比旧的Date/Calendar好用太多啦!

内容的提问来源于stack exchange,提问作者hotmeatballsoup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:04:59