8

如何用bash转换日期HH:MM:SS?

知道这是我在文件中恢复的日期,所以我不能以其他格式保存它。

我有两个变量 $DateStart 和 $DateEnd 我想要两者之间的区别。

4

4 回答 4

8
date +%s

返回自 1970-01-01 00:00:00 UTC 以来的当前日期时间(以秒为单位)

如果您想获得自 1970-01-01 00:00:00 UTC 以来的给定日期时间(以秒为单位),例如:

kent$  date -d"2008-08-08 20:20:20" +%s
1218219620

要在几秒钟内获得差异,您只需在几秒钟内获得两个日期,然后执行s1-s2

于 2013-05-07T08:37:05.867 回答
5

-j在 Mac 上,您可以使用和-f选项的组合将日期转换为另一个日期:

$ date -j -f '%Y-%m-%d %H:%M:%S' "2016-02-22 20:22:14" '+%s'
1456168934

其中-j禁止更改系统时钟, -f <fmt>给出用于解析给定日期的格式, "2016-02-22 20:22:14"是输入日期和 +<fmt>输出格式。

于 2016-02-22T19:26:06.787 回答
3

假设 HH:MM:SS 格式的time_hhmmss时间是可变的,并且需要以秒为单位的时间存储在time_s

IFS=: read -r h m s <<<"$time_hhmmss"
time_s=$(((h * 60 + m) * 60 + s))
于 2013-05-07T08:45:28.510 回答
1

尝试将我的解决方案与 sed+awk 一起使用:

echo $DateStart | sed 's/:\|-/ /g;' | awk '{print $4" "$3" "$2" "$1}' | awk '{print $1+$2*60+$3*3600+$4*86400}'
echo $DateEnd | sed 's/:\|-/ /g;' | awk '{print $4" "$3" "$2" "$1}' | awk '{print $1+$2*60+$3*3600+$4*86400}'

它用 sed 拆分字符串,然后将数字倒转(“DD hh mm ss”->“ss mm hh DD”)并用 awk 计算它们。即使您添加天数也可以使用:[[DD-]hh:]mm:ss,例如:

       34:56
    12:34:56
123-12:34:56
于 2014-08-07T21:14:58.163 回答