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

Dart中如何测试两个Duration或DateTime是否近似相等

方案1:直接计算时间差校验

这是最简单的实现方式,直接计算两个时间的差值绝对值,判断是否在允许公差范围内即可:

test('times are approximately equal', () {
  final expected = DateTime.now();
  final actual = DateTime.now();
  expect(actual.difference(expected).abs(), lessThanOrEqualTo(Duration(seconds: 1)));
});

方案2:自定义Matcher复用逻辑

如果项目中多处需要用到近似时间校验,可以自定义一个Matcher,写法更符合Dart测试的惯用风格,测试失败时的报错信息也更清晰:
首先定义通用校验方法:

/// 校验DateTime是否在[tolerance]公差范围内和[expected]相等
Matcher approxDateTime(DateTime expected, {Duration tolerance = const Duration(seconds: 1)}) {
  return predicate<DateTime>(
    (actual) => actual.difference(expected).abs() <= tolerance,
    'should be within ${tolerance.inMilliseconds}ms of $expected',
  );
}

使用方式:

test('times are approximately equal', () {
  final expected = DateTime.now();
  final actual = DateTime.now();
  // 默认公差1秒
  expect(actual, approxDateTime(expected));
  // 也可以自定义公差,比如允许200毫秒偏差
  // expect(actual, approxDateTime(expected, tolerance: Duration(milliseconds: 200)));
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 00:06:10