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

Dart/Flutter中如何将毫秒级时间差转换为分钟?

正确将时间差毫秒数转换为分钟的方法

你之前用DateTime.fromMillisecondsSinceEpoch(timeDiff)得到1970年日期的原因是:这个方法的作用是把毫秒数当作从UTC时间1970-01-01 00:00:00开始的时间戳,而非计算时间差的工具,所以才会输出起始时间附近的日期。

要把时间差的毫秒数转换成分钟,直接做单位换算即可:1分钟 = 60秒 = 60000毫秒,用时间差毫秒数除以60000就能得到对应的分钟数。

修正后的代码示例

int trainingStartInEpoch = DateTime(trainingDateYear, trainingDateMonth, trainingDateDay, trainingStartHour, trainingStartMinutes).millisecondsSinceEpoch;
int trainingEndInEpoch = DateTime(trainingDateYear, trainingDateMonth, trainingDateDay, trainingEndHour, trainingEndMinutes).millisecondsSinceEpoch;
int timeDiff = trainingEndInEpoch - trainingStartInEpoch;

// 转换为带小数精度的分钟数
double totalMinutes = timeDiff / 60000;
// 或者取整的分钟数
int totalMinutesInt = (timeDiff / 60000).round();

print("总时长(分钟): $totalMinutes");

适配完成百分比计算的场景

如果要计算当前已完成时长占总时长的百分比,可参考以下代码:

// 获取当前时间的时间戳
int currentTimeEpoch = DateTime.now().millisecondsSinceEpoch;
// 计算已流逝的时间差
int elapsedDiff = currentTimeEpoch - trainingStartInEpoch;
// 转换为已流逝分钟数
double elapsedMinutes = elapsedDiff / 60000;
// 计算百分比(转为0-100区间的数值)
double completionPercentage = (elapsedMinutes / totalMinutes) * 100;
// 确保百分比不会超出0-100范围
completionPercentage = completionPercentage.clamp(0, 100);

print("完成百分比: ${completionPercentage.toStringAsFixed(1)}%");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:17:09