如何在Java中获取当前到未来指定时间的毫秒差值?
如何在Java中获取当前到未来10分钟的毫秒数并实现等待
你的代码存在几个关键问题:
myfuturedateasdate.setTime(LocalDateTime);类型不匹配,setTime接收的是Date对象,不能直接传入LocalDateTimemyfuturedateasdate.set(Calendar.MILLISECOND, timeintervaldelay );这行是把毫秒位设为10,不是添加10分钟,逻辑完全错误- 差值计算时用了秒内毫秒数(
millis)和 epoch 总毫秒数(futuredateinmilliseconds),两者维度不同,计算结果毫无意义
下面给出两种可靠实现方式:
推荐:Java 8+ 新时间API(线程安全,简洁)
用 Instant 或 LocalDateTime 处理时间,API更直观且无线程安全问题:
import java.time.Instant; import java.time.temporal.ChronoUnit; public class WaitDemo { public static void main(String[] args) throws InterruptedException { // 获取当前UTC时间(带时区,精度更高) Instant now = Instant.now(); // 计算10分钟后的时间 Instant futureTime = now.plus(10, ChronoUnit.MINUTES); // 直接获取毫秒差 long millisToWait = ChronoUnit.MILLIS.between(now, futureTime); // 执行等待 Thread.sleep(millisToWait); System.out.println("等待10分钟完成,当前时间:" + Instant.now()); } }
如果需要本地时间展示,也可以用 LocalDateTime,但注意它不带时区,跨时区场景建议用 Instant:
import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; public class WaitDemo { public static void main(String[] args) throws InterruptedException { LocalDateTime now = LocalDateTime.now(); LocalDateTime futureTime = now.plus(10, ChronoUnit.MINUTES); long millisToWait = ChronoUnit.MILLIS.between(now, futureTime); Thread.sleep(millisToWait); System.out.println("等待完成,当前本地时间:" + LocalDateTime.now()); } }
兼容Java 8之前:传统Calendar方式
如果需要兼容旧版本Java,用 Calendar 实现:
import java.util.Calendar; public class WaitDemo { public static void main(String[] args) throws InterruptedException { Calendar now = Calendar.getInstance(); Calendar future = Calendar.getInstance(); // 给未来时间添加10分钟 future.add(Calendar.MINUTE, 10); // 计算毫秒差:未来时间总毫秒 - 当前时间总毫秒 long millisToWait = future.getTimeInMillis() - now.getTimeInMillis(); Thread.sleep(millisToWait); System.out.println("等待完成,当前时间:" + Calendar.getInstance().getTime()); } }
内容的提问来源于stack exchange,提问作者Roboman Robo
相关产品推荐
相关产品推荐

