如何用bash转换日期HH:MM:SS?
知道这是我在文件中恢复的日期,所以我不能以其他格式保存它。
我有两个变量 $DateStart 和 $DateEnd 我想要两者之间的区别。
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
-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>
输出格式。
假设 HH:MM:SS 格式的time_hhmmss
时间是可变的,并且需要以秒为单位的时间存储在time_s
:
IFS=: read -r h m s <<<"$time_hhmmss"
time_s=$(((h * 60 + m) * 60 + s))
尝试将我的解决方案与 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