bash - 在 bash 中减去 2 个日期

标签 bash

我在 bash 中有 2 个字符串 s1s2 (代表日期),格式为

s1="Fri Sep 10 22:24:51 IST 2021"
s2="Fri Sep 10 22:45:55 IST 2021"

我想减去这些日期并获得格式为HH:MM:SS的结果

我尝试了以下代码(至少将字符串转换为日期)

d1=$(date -s $s1 +%s)
d2=$(date -s $s2 +%s)
d3=$d2-$d1
echo "$d3"

但最终出现以下错误

date: extra operand ‘10’

这是我想要的示例输出

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

我被困在这里,不知道如何继续。对此的任何帮助将不胜感激!

最佳答案

将 GNU date 的时间戳转换为自 1970-01-01 00:00:00 UTC 以来的秒数。将它们相减并将结果转换为所需的格式。

s1="Fri Sep 10 22:24:51 IST 2021"
s2="Fri Sep 10 22:45:55 IST 2021"

diff=$(( $(date -d "$s2" +%s) - $(date -d "$s1" +%s) ))
date -d "@$diff" -u +%H:%M:%S

输出:

00:21:04

关于bash - 在 bash 中减去 2 个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69136952/

相关文章:

linux - 我怎样才能将它组合成一个单行 - bash

Ruby 执行 shell 命令并获取数组

java - 在多个输入文件上运行终端程序

bash - 如何使用 Shell 脚本检查用户输入值是大写、小写还是数字?

linux - shell 条件问题

arrays - BASH - 如何从 CSV 文件的列中提取数据并将其放入数组中?

bash - 在Packer脚本中更改文件(使用sed)使文件保持不变

linux - 出现错误 : set +e does not seem to do the job 时自动退出 bash shell 脚本

bash - 如果输入由内部 "while read"处理,我如何才能跳出 shell 脚本循环?

linux - Bash:为什么对这个字符串进行 egrepping 会成功?