
本文详解如何使用 robot framework 的日期时间关键字正确计算两个带时分秒的日期时间戳之差,并转换为分钟数,重点解决格式不匹配导致的解析错误。
本文详解如何使用 robot framework 的日期时间关键字正确计算两个带时分秒的日期时间戳之差,并转换为分钟数,重点解决格式不匹配导致的解析错误。
在 Robot Framework 中计算两个日期时间(含年月日、时分秒)之间的差值并以分钟为单位输出,关键在于确保所有时间字符串严格遵循解析规则。默认情况下,Subtract Date From Date 关键字仅接受 ISO 8601 格式(如 2019-11-10 23:11:11)的时间字符串;若传入 11/10/19 11:11:11 PM 等非标准格式,框架无法自动识别,将触发 ValueError(如错误中出现的 1225-23-10... 即因字段错位导致的解析混乱)。
✅ 正确做法:统一使用 ISO 格式 + 显式 date_format
Robot Framework 的日期操作关键字(如 Subtract Date From Date)支持通过 date_format 参数指定输入时间的格式。因此,无需手动拼接或转换为非标准格式,而应:
-
用
Get Current Date生成 ISO 格式当前时间(推荐一步到位); - 对硬编码的参考时间,明确声明其格式;
-
直接相减后,用
Convert Time To Number转为秒,再除以 60 得分钟(注意:Convert Time To Seconds仅适用于 Robot Framework ≥ 6.0;旧版本请用Convert Time To Number返回秒数)。
✅ 推荐工作代码示例:
*** Test Cases ***
GetDateAndTimeDifference
# 获取当前完整 ISO 时间(含年月日时分秒),格式:YYYY-MM-DD HH:MM:SS
${now} = Get Current Date result_format=%Y-%m-%d %H:%M:%S
# 定义参考时间(注意:使用 24 小时制更稳妥;若必须用 12 小时制+AM/PM,请显式指定 date_format)
${ref_time} = Set Variable 2019-11-10 23:11:11
# 执行减法:两个 ISO 格式时间直接相减(结果为 'X days X hours X minutes X seconds' 字符串)
${diff_str} = Subtract Date From Date ${now} ${ref_time}
# 将时间差字符串转为总秒数(Robot Framework ≥ 6.0)
${total_seconds} = Convert Time To Number ${diff_str} result_format=seconds
# 计算分钟数(保留整数或按需四舍五入)
${minutes} = Evaluate round(${total_seconds} / 60)
Log To Console ⏱️ 时间差:${minutes} 分钟⚠️ 若必须使用 12 小时制(如 11/10/19 11:11:11 PM)?
需显式提供 date_format 参数,且确保 Get Current Date 也输出匹配格式:
${now_str} = Get Current Date result_format=%m/%d/%y %I:%M:%S %p
${ref_str} = Set Variable 11/10/19 11:11:11 PM
${diff} = Subtract Date From Date ${now_str} ${ref_str} date_format=%m/%d/%y %I:%M:%S %p
${minutes} = Evaluate round(${diff} / 60) # 注意:此时 ${diff} 已是秒数(Robot FW 自动解析后返回数值)? 提示:
Subtract Date From Date在指定了date_format时,返回值为秒数(float),而非字符串,可直接参与数学运算。
? 关键注意事项
- ❌ 避免拼接
Get Current Date的多段结果(如${date} + ${time}),易引发格式错乱与时区歧义; - ✅ 始终优先使用
%Y-%m-%d %H:%M:%S这类 ISO 格式,兼容性最佳、不易出错; - ?
Get Current Date默认使用系统本地时区;如需 UTC,添加utc=True参数; - ?
Convert Time To Number是更通用的转换方式(支持seconds/minutes/hours单位),比Convert Time To Seconds更灵活。
掌握格式一致性与 date_format 的显式声明,即可稳健实现任意精度的日期时间差计算。

















