设置晚于实际时间的新时间:Java Date类plusMinutes失效问题求助
问题分析与解决方案
你遇到的问题核心是**java.util.Date类根本没有plusMinutes()方法**,你大概率是把它和Java 8之后引入的新日期时间API(java.time包下的类)搞混啦!旧的Date类不仅设计老旧、可变,还没有这类便捷的时间操作方法,所以你的代码其实连编译都过不了,更别说让出发时间生效了。
下面给你两种解决方案,优先推荐第一种现代API的写法:
方案一:使用Java 8+的java.time新日期时间API(推荐)
这个包下的类设计更合理,线程安全,操作也更直观,完全替代了旧的Date和SimpleDateFormat。
首先调整你的成员变量类型,然后用LocalDateTime来处理时间:
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class YourClass { // 把成员变量换成LocalDateTime类型 private LocalDateTime arrivalTime; private LocalDateTime departureTime; // 用线程安全的DateTimeFormatter替代SimpleDateFormat,全局初始化一次即可 private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("H:mm"); public void updateTimes() { // 获取当前本地时间 this.arrivalTime = LocalDateTime.now(); // 直接调用plusMinutes添加3分钟,非常直观 this.departureTime = this.arrivalTime.plusMinutes(3); // 打印格式化后的时间 System.out.println("实际到达时间:" + arrivalTime.format(TIME_FORMATTER)); System.out.println("出发时间:" + departureTime.format(TIME_FORMATTER)); } }
为什么推荐这个方案?
LocalDateTime专门处理不含时区的本地日期时间,提供了plusMinutes、minusHours等一堆便捷的时间操作方法,完全适配你的需求。DateTimeFormatter是线程安全的,不用每次调用方法都新建实例,性能和安全性都比SimpleDateFormat好太多。- 如果你的业务需要考虑时区,只需要换成
ZonedDateTime类,用法几乎一致,只是会带上时区信息。
方案二:兼容旧API(仅用于维护老旧项目)
如果因为项目限制必须用java.util.Date,那可以借助Calendar类来实现时间添加:
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class YourClass { private Date arrivalTime; private Date departureTime; private static final SimpleDateFormat SDF = new SimpleDateFormat("H:mm"); public void updateTimes() { this.arrivalTime = new Date(); // 用Calendar来操作时间 Calendar calendar = Calendar.getInstance(); calendar.setTime(arrivalTime); calendar.add(Calendar.MINUTE, 3); // 添加3分钟 this.departureTime = calendar.getTime(); // 打印时间 System.out.println("实际到达时间:" + SDF.format(arrivalTime)); System.out.println("出发时间:" + SDF.format(departureTime)); } }
不过还是建议尽量迁移到新的java.time API,旧API的设计缺陷真的很容易踩坑。
内容的提问来源于stack exchange,提问作者HeRoy
相关产品推荐
相关产品推荐

