在 bash 中将时间戳转换为秒数

在 bash 中将时间戳转换为秒数

据我所知,bash 变量没有特定的类型。

我的问题是,我需要将时间戳(始终采用格式:)转换hh:mm:ss为表示秒的单个整数。

因此我将hhmmss部分剪切成单独的字符串并用来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 的答案。我可以按照你尝试的方式给出一些答案,

我假设您将小时、分钟和秒存储在 和 中HHMM然后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

相关内容