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
相关产品推荐
相关产品推荐

