You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Shell脚本拆分多分隔符时间字符串并转换为总秒数

自定义时间字符串转总秒数Shell脚本实现

前置说明

脚本默认采用换算规则:1年=365天、1月=30天,如有特殊换算需求可直接修改脚本内的单位系数即可。

完整脚本代码

#!/bin/bash

# 各单位对应的秒数系数,可按需调整
Y_SEC=$((365 * 24 * 3600))
MT_SEC=$((30 * 24 * 3600))
D_SEC=$((24 * 3600))
H_SEC=3600
M_SEC=60
S_SEC=1

# 入参校验
if [ $# -ne 1 ]; then
    echo "用法:$0 <时间字符串>"
    exit 1
fi

time_str="$1"
total_sec=0

# 依次提取各单位数值累加(支持同单位多值叠加)
# 提取年
for val in $(grep -oE '[0-9]+Y' <<< "$time_str" | sed 's/Y//'); do
    total_sec=$((total_sec + val * Y_SEC))
done
# 提取月
for val in $(grep -oE '[0-9]+MT' <<< "$time_str" | sed 's/MT//'); do
    total_sec=$((total_sec + val * MT_SEC))
done
# 提取天
for val in $(grep -oE '[0-9]+D' <<< "$time_str" | sed 's/D//'); do
    total_sec=$((total_sec + val * D_SEC))
done
# 提取小时
for val in $(grep -oE '[0-9]+H' <<< "$time_str" | sed 's/H//'); do
    total_sec=$((total_sec + val * H_SEC))
done
# 提取分钟
for val in $(grep -oE '[0-9]+M' <<< "$time_str" | sed 's/M//'); do
    total_sec=$((total_sec + val * M_SEC))
done
# 提取秒
for val in $(grep -oE '[0-9]+S' <<< "$time_str" | sed 's/S//'); do
    total_sec=$((total_sec + val * S_SEC))
done

echo "$total_sec"

使用方法

  1. 保存上述代码为time2sec.sh,给文件添加执行权限:
chmod +x time2sec.sh
  1. 直接传入时间字符串运行即可,示例运行结果:
  • ./time2sec.sh 1H20S → 输出 3620
  • ./time2sec.sh 10M200S → 输出 800
  • ./time2sec.sh 10M100S → 输出 700
  • ./time2sec.sh 1Y2MT3D4H5H6S → 输出 36892806

特性说明

  • 支持同单位多值自动累加,符合题目给出的不规则字符串格式要求
  • 单位匹配不会出现混淆,优先匹配长单位MT再匹配短单位M,不会误识别
  • 兼容所有符合题目规则的输入格式

内容的提问来源于stack exchange,提问作者ranjith soma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:18:02