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

Java计算两个日期秒数差及定时发送数据代码问题排查

问题排查与修复方案

嘿,我一眼就揪出你代码里的问题啦!核心问题出在时间差的单位转换和判断条件不匹配上,完全偏离了你“每隔10秒发送一次数据”的需求。

问题分析

你的TimeBetweenDates方法把两个时间的毫秒差转换成了秒数,但后续判断时却拿这个秒数和10000(也就是10000秒,约2.7小时)做比较——这意味着你要等将近3小时才会发送一次数据,和你想要的10秒间隔差了十万八千里!

举个例子:如果两个时间间隔是10秒,TimeBetweenDates会返回10(秒数),但你的判断条件upload > 10000永远不会触发,自然不会发送数据。

两种修复方案

方案一:基于秒数判断(适配现有转换逻辑)

既然方法返回的是秒数,那就把判断条件改成检查是否大于等于10秒,同时优化变量名提升可读性:

Calendar currentTime = Calendar.getInstance();
long intervalSeconds = TimeBetweenDates(sendTime, currentTime);
if (intervalSeconds >= 10) {
    String udpMsg = "OK";
    SendUDP(udpMsg);
    sendTime = Calendar.getInstance(); // 更新发送时间
}

public static long TimeBetweenDates(Calendar start, Calendar end) {
    long endMillis = end.getTimeInMillis();
    long startMillis = start.getTimeInMillis();
    return TimeUnit.MILLISECONDS.toSeconds(Math.abs(endMillis - startMillis));
}

方案二:基于毫秒数判断(保持原判断逻辑)

如果你更习惯用毫秒做单位,直接修改TimeBetweenDates返回原始毫秒差即可:

Calendar currentTime = Calendar.getInstance();
long intervalMillis = TimeBetweenDates(sendTime, currentTime);
if (intervalMillis >= 10000) { // 10秒 = 10000毫秒
    String udpMsg = "OK";
    SendUDP(udpMsg);
    sendTime = Calendar.getInstance(); // 更新发送时间
}

public static long TimeBetweenDates(Calendar start, Calendar end) {
    long endMillis = end.getTimeInMillis();
    long startMillis = start.getTimeInMillis();
    return Math.abs(endMillis - startMillis); // 直接返回毫秒差
}

额外小建议

  • Java变量名建议用小驼峰命名(比如currentTime、sendTime),更符合行业编码规范;
  • 如果这段逻辑是在循环里执行的,别让线程空转浪费CPU,可以加个Thread.sleep(1000)让线程每秒检查一次,避免资源消耗过高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:08:09