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

