在Bash中如何将HH:MM:SS格式的时间转换为对应的总秒数
HH:MM:SS格式时间转总秒数实现方案
你之前使用的date -d$element +%s默认会将输入的时间识别为当前日期的对应时间点,返回的是Unix时间戳(1970-01-01到该时间点的总秒数),因此不符合需求。下面提供多种可用实现:
方法1:调整date命令参数实现
GNU Linux 环境(绝大多数发行版默认)
指定基准时间为UTC时区的1970-01-01,此时返回的时间戳就是对应时分秒的总秒数:
element="00:25:56" date -d "UTC 1970-01-01 $element" +%s # 输出:1556
macOS 环境
macOS自带的date命令参数和GNU版本不同,使用如下写法:
element="01:00:00" date -j -u -f "%H:%M:%S" "$element" +%s # 输出:3600
方法2:使用awk拆分计算
兼容性更强,不受不同系统date命令实现差异的影响:
element="00:25:56" awk -F: '{print $1*3600 + $2*60 + $3}' <<< "$element" # 输出:1556
方法3:纯Shell内置命令实现
无需调用外部工具,执行效率更高,同时添加了十进制强制解析避免0开头的数字被识别为八进制报错:
element="00:25:56" IFS=: read h m s <<< "$element" total_seconds=$((10#$h * 3600 + 10#$m * 60 + 10#$s)) echo $total_seconds # 输出:1556
内容的提问来源于stack exchange,提问作者Jamie Hutber
相关产品推荐
相关产品推荐

