当我有变量 Start=08:22:39 和 end=08:23:22 时。我如何获得这两个变量的差异

当我有变量 Start=08:22:39 和 end=08:23:22 时。我如何获得这两个变量的差异

开始=08:20:12 结束=08:22:12

如何计算差异。

请帮忙解决一下..

答案1

假设两个时间都在同一天(而不是,例如 23:59:00 - 00:01:00),并且该时间不高于 23,则以下命令(在bash或 POSIX-中sh)将显示您可以在几秒钟内了解两者之间的差异:

$ start="08:20:12" end="08:22:12"
$ echo $(( $(date +"%s" -d "$end") - $(date +"%s" -d "$start") ))
120

另一种方法,不使用date命令,它还会检查 the$end是否大于,如果不大于,$start则添加 24 小时的秒数:$end

# start="08:20:12" end="08:22:12"

# IFS=: read h m s <<< $start;  START=$(( (3600 * ${h#0} ) + (60 * ${m#0}) + ${s#0} ))
# IFS=: read h m s <<< $end;  END=$(( (3600 * ${h#0} ) + (60 * ${m#0}) + ${s#0} ))
# [[ $END -lt $START ]] && END=$(( $END + (24*60*60) ))

# echo $(( $END - $START ))
120

如果数字小于 10,此代码还会从小时/分钟/秒中删除前面的 0,将其转换为单个数字(假设所有三个都是两位数)。并编写一个将时间转换为秒的函数。

# function convert_to_seconds { IFS=: read h m s <<< $1;  echo $(( (3600 * ${h#0} ) + (60 * ${m#0}) + ${s#0} )) ; }

# START=$(convert_to_seconds "23:59:12")
# END=$(convert_to_seconds "00:01:12")
# [[ $END -lt $START ]] && END=$(( $END + (24*60*60) ))

# echo $(( $END - $START ))
120

相关内容