Shell脚本中如何将AWS返回的UTC格式时间转换为Unix时间戳
AWS返回的UTC格式时间转Unix时间戳解决方案
核心报错原因
从提供的错误日志可以定位到两个核心问题:
- 存储时间的
$timestamp变量值本身包裹了多余的双引号,实际值为"2021-06-23T10:12:00Z",而非纯净的时间字符串2021-06-23T10:12:00Z,导致date命令无法识别日期格式 -j是BSD系统(含macOS)date命令的专属参数,Linux默认的GNU date不支持该参数,所以第二种方法直接报错无效选项
修复步骤
第一步:预处理变量去除多余双引号
用shell参数扩展直接去除变量里的所有双引号即可:
timestamp=${timestamp//\"/}
第二步:按系统环境执行转换命令
Linux(GNU date)环境
该格式自带的Z后缀会被GNU date自动识别为UTC 0时区,无需额外指定时区参数:utctimestamp=$(date -d "$timestamp" +%s)macOS/BSD 环境
用BSD date专属的格式匹配参数即可,注意格式字符串前不需要加+号:utctimestamp=$(date -j -f "%Y-%m-%dT%H:%M:%SZ" "$timestamp" +%s)
完整示例
# 模拟从AWS接口获取的带多余引号的原始时间 raw_timestamp='"2021-06-23T09:48:00Z"' # 去除多余引号 timestamp=${raw_timestamp//\"/} # Linux环境执行转换 utctimestamp=$(date -d "$timestamp" +%s) # 输出结果:1624441680 echo $utctimestamp
内容的提问来源于stack exchange,提问作者P.Lonnie
相关产品推荐
相关产品推荐

