Linux/CentOS/RHEL中如何通过Shell脚本将任意日期格式转为毫秒时间戳
Linux/CentOS/RHEL 下通过Shell将任意标准日期转换为毫秒级时间戳
CentOS/RHEL 全系列默认预装GNU版本的date工具,本身就支持自动识别绝大多数通用日期格式,不需要安装额外依赖,也不需要手写复杂的字符串解析逻辑。
实现逻辑
- 利用
date -d "日期字符串" +%s命令,自动解析输入的日期,输出对应秒级Unix时间戳 - 将秒级时间戳乘以1000,即可得到毫秒级时间戳
- 增加简单的入参和解析错误校验,避免异常输入导致无意义输出
可用脚本
直接保存为date2ms.sh,加可执行权限chmod +x date2ms.sh即可使用:
#!/bin/bash if [ $# -ne 1 ]; then echo "使用方法: $0 <待转换日期字符串>" exit 1 fi input_date="$1" # 解析日期获取秒级时间戳,错误输出重定向避免干扰 sec_ts=$(date -d "$input_date" +%s 2>/dev/null) if [ $? -ne 0 ]; then echo "解析失败:输入的日期格式无法识别" exit 2 fi # 转换为毫秒级时间戳 ms_ts=$((sec_ts * 1000)) echo $ms_ts
格式兼容验证
针对问题中列出的三种常见日期格式,实测均可正常解析:
- RFC2822格式:
Thu, 23 Jun 2022 08:27:26 +0000
执行:./date2ms.sh "Thu, 23 Jun 2022 08:27:26 +0000"
输出:1655972846000 - Unix系统日志默认日期格式:
Thu Jun 23 11:11:43 UTC 2022
执行:./date2ms.sh "Thu Jun 23 11:11:43 UTC 2022"
输出:1655982703000 - ISO8601格式:
2022-06-23T08:28:23Z
执行:./date2ms.sh "2022-06-23T08:28:23Z"
输出:1655972903000
注意事项
- 该方案依赖GNU版
date,CentOS/RHEL 6及以上版本默认满足,其他类Unix系统(如macOS、FreeBSD)自带的BSD版date不支持-d参数的自动解析逻辑,无法直接使用 - 输入日期如果自带时区标识(比如
+0800、UTC、Z代表的UTC时区),date会自动按时区偏移计算对应时间戳,不需要手动处理时区转换 - 如果需要解析自定义的非通用日期格式,可以通过
date的--date参数配合格式符指定解析规则,适配特殊场景
内容的提问来源于stack exchange,提问作者Anil
相关产品推荐
相关产品推荐

