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

