据我所知,bash 变量没有特定的类型。
我的问题是,我需要将时间戳(始终采用格式:)转换hh:mm:ss
为表示秒的单个整数。
因此我将hh
、mm
和ss
部分剪切成单独的字符串并用来expr
计算秒数整数,如下所示:
TIME=expr $HH \* 3600 + $MM \* 60 + $SS
但是当例如$HH=00
然后 expr 不起作用时。是否可以将字符串(如00
或)转换01
为整数?
答案1
尝试一下awk
。例如:
echo "00:20:40" | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }'
因此,如果你有:
time="00:20:40"
然后:
seconds=$(echo $time | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }')
并将echo $seconds
打印1240
。
答案2
如果你想将当前时间转换为秒,尝试这个脚本
#!/bin/bash
let var=$(date +%H)*3600+$(date +%M)*60+$(date +%S)
echo $var
它会将当前时间转换为秒(整数)。
如果你想转换任意时间字符串就像HH:MM:SS
进入第二个那么最好使用Radu Rădeanu 的答案。我可以按照你尝试的方式给出一些答案,
我假设您将小时、分钟和秒存储在 和 中HH
,MM
然后SS
使用以下内容将秒中的时间存储到 中var
,
let var=HH*3600+MM*60+SS
答案3
如果您的时间戳少于 24 小时,您可以使用 gnu date 并通过指定 UTC 转换为纪元 (1970 年 1 月 1 日) 后的秒数:
timestamp="23:59:59" # largest timestamp possible w/ this method
date -d "1970-01-01T${timestamp} UTC" "+%s"
输出:
104399