Flutter中如何比较两个时间 判断差值是否超过1分钟
时间比较功能修正方案
原有代码问题
- 逻辑与需求不符:原代码实现的是判断当前时间是否落在两个时分构成的时间区间内,而非计算
last_uploaded_time与当前时间的差值是否小于/大于1分钟 - 存在冗余转换:将当前
DateTime对象格式化为字符串再拆分解析,既丢失了秒、毫秒精度,也增加了出错概率 - 未处理跨天边界:如果
last_uploaded_time为23:59,当前时间为次日00:01,原逻辑计算的时间差会完全错误 - 区间判断逻辑错误:构造的
endDate为当前时间对应时分的0秒时刻,当前实际时间必然晚于该时刻,导致区间判断大概率不成立
修正后实现代码
直接对时间对象做差值计算即可,不需要额外转字符串拆分:
import 'package:intl/intl.dart'; // 返回值规则可自行调整:示例中true代表时间差小于1分钟,false代表大于等于1分钟 bool compareTime(String lastUploadedTime) { print(lastUploadedTime); DateTime currentDateTime = DateTime.now(); String currentTime = DateFormat(DateUtil.TIME_FORMAT).format(currentDateTime); print(currentTime); // 解析上传时间字符串为DateTime对象 DateFormat timeFormatter = DateFormat(DateUtil.TIME_FORMAT); DateTime uploadTime = timeFormatter.parse(lastUploadedTime); // 补全年月日为当前日期,避免日期不匹配问题 uploadTime = DateTime( currentDateTime.year, currentDateTime.month, currentDateTime.day, uploadTime.hour, uploadTime.minute, uploadTime.second, ); // 兼容跨天场景:如果解析出的上传时间比当前时间早12小时以上,判定为前一天的时间 if (currentDateTime.difference(uploadTime).inHours > 12) { uploadTime = uploadTime.add(const Duration(days: 1)); } // 兼容跨天场景:如果解析出的上传时间比当前时间晚12小时以上,判定为前一天的时间 if (uploadTime.difference(currentDateTime).inHours > 12) { uploadTime = uploadTime.subtract(const Duration(days: 1)); } // 计算两个时间的差值绝对值 Duration timeDiff = currentDateTime.difference(uploadTime).abs(); // 按需求调整判断条件即可,示例为判断是否小于1分钟 if (timeDiff.inSeconds < 60) { print("时间差小于1分钟"); return true; } else { print("时间差大于等于1分钟"); return false; } }
调整说明
如果你的last_uploaded_time本身包含完整的年月日信息,直接解析为完整的DateTime对象即可,不需要额外补全日期和处理跨天逻辑。如果需要判断差值大于1分钟,只需把判断条件修改为timeDiff.inSeconds >= 60即可。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

