Flutter 计算两个12小时制时间字符串的时间差 现有代码结果异常求助
问题原因
- 时间格式化串配置错误:解析带AM/PM标记的12小时制时间,必须在格式串中添加
a标记匹配上下午标识,原代码使用hh:mm格式无法识别后缀的AM/PM,导致10:00AM和10:00PM都会被错误解析为同一天的10:00,是差值计算错误的核心原因。 - 计算逻辑冗余且易出错:原代码将解析后的时间转为HH:mm字符串再拆分计算差值,额外增加了分钟借位等边界问题的处理成本,不需要多步转换即可直接计算时间差。
修正后的代码
import 'package:intl/intl.dart'; void main() { // 配置支持12小时制+AM/PM解析的格式化器 DateFormat df = DateFormat("hh:mm a"); // 示例1:10:00AM 和 01:00PM DateTime startTime = df.parse("10:00AM"); DateTime endTime = df.parse("01:00PM"); Duration diff = endTime.difference(startTime); // 取绝对值适配跨天差值计算场景 int hourDiff = diff.inHours.abs(); print(hourDiff); // 输出3,符合预期 // 示例2:10:00AM 和 10:00PM startTime = df.parse("10:00AM"); endTime = df.parse("10:00PM"); diff = endTime.difference(startTime); hourDiff = diff.inHours.abs(); print(hourDiff); // 输出12,符合预期 }
补充说明
如果需要保留时间先后的正负标识(比如结束时间早于开始时间返回负差值),去掉.abs()即可;如果需要计算带分钟的精确差值,可以直接使用Duration对象的相关属性获取对应精度的结果,无需手动处理时分的借位逻辑。
内容的提问来源于stack exchange,提问作者rameez khan
相关产品推荐
相关产品推荐

