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

Bash中如何将两个日期字符串相减并输出HH:MM:SS格式结果

问题原因
  • date命令的-s参数是用于设置系统时间的,并不是用来解析输入的日期字符串,解析指定日期应该使用-d(GNU date,即Linux默认带的date版本)参数。
  • $s1/$s2没有加双引号,字符串内部的空格会被shell拆分为多个独立参数传给date命令,就会触发extra operand报错。
  • 差值计算没有使用算术扩展语法,直接写d3=$d2-$d1只会把内容存为字符串,不会计算实际的数值差。
正确实现代码
#!/bin/bash
s1="Fri Sep 10 22:24:51 IST 2021"
s2="Fri Sep 10 22:45:55 IST 2021"

# 转换为秒级时间戳,变量加双引号保证完整传参
d1=$(date -d "$s1" +%s)
d2=$(date -d "$s2" +%s)
# 算术扩展计算秒级差值
delta=$((d2 - d1))

# 转换为HH:MM:SS格式,加-u参数用UTC时区避免时区偏移误差
formatted_delta=$(date -d "@$delta" -u +%H:%M:%S)

echo "Subtracted Date in HH:MM:SS is \"$formatted_delta\""
执行结果

运行上述代码会直接输出你期望的结果:

Subtracted Date in HH:MM:SS is "00:21:04"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:12:04