在Bash中如何将无冒号的HHMMSS格式时间转换为秒数
实现HHMMSS格式时间转秒数的方案
方案1:兼容原有date命令逻辑(推荐,无需修改原有转换逻辑)
你只需要先把输入的6位HHMMSS格式字符串插入冒号,转换成原有逻辑支持的HH:MM:SS格式即可,用bash内置字符串操作即可完成,无需额外调用外部工具:
# 输入的HHMMSS格式时间,示例值可替换为你的变量 input_time=010000 # 插入冒号转换为HH:MM:SS格式 formatted_time="${input_time:0:2}:${input_time:2:2}:${input_time:4:2}" # 调用原有逻辑转换为秒数 result=$(date -d "1970-01-01 $formatted_time Z" +%s) echo $result
测试结果:
- 输入
010000输出3600,符合预期 - 输入
004032输出2432,符合预期
方案2:直接算术计算(性能更高,不依赖date命令)
如果不需要兼容date的其他逻辑,直接拆分字段计算秒数效率更高,同时要注意处理前导零导致的八进制解析问题:
input_time=004032 # 拆分字段,加10#强制按十进制解析,避免08/09这类值报语法错误 h=$((10#${input_time:0:2})) m=$((10#${input_time:2:2})) s=$((10#${input_time:4:2})) # 直接计算总秒数 result=$((h * 3600 + m * 60 + s)) echo $result
可选:增加输入格式校验
可以加一层判断避免非法输入导致报错:
if [[ ! $input_time =~ ^[0-9]{6}$ ]]; then echo "输入错误,请传入6位HHMMSS格式的数字时间" exit 1 fi
内容的提问来源于stack exchange,提问作者Jamie Hutber
相关产品推荐
相关产品推荐

