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

设置晚于实际时间的新时间: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:27:24