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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:27:01