如何使用Linux命令将2019-03-08T17:35:44Z转为Epoch时间?
嘿,这个问题我刚好经常碰到,在Linux里转Epoch时间其实有不少实用方法,我分情况给你讲清楚:
一、Linux系统中通用的时间转Epoch时间方法
Epoch时间指的是从1970-01-01 00:00:00 UTC到指定时间的总秒数,最常用的工具就是系统自带的date命令:
- 转换当前时间到Epoch:
直接执行这条命令就行,输出就是当前时间的Epoch秒数:date +%s - 转换指定普通格式时间(比如
2019-03-08 17:35:44):
用-d参数指定要转换的时间字符串,再搭配+%s输出格式:date -d "2019-03-08 17:35:44" +%s
二、针对特定格式
2019-03-08T17:35:44Z的转换方法 你提到的这个是ISO 8601格式的UTC时间(T是日期和时间的分隔符,Z表示UTC时区),下面两种方法都能搞定:
方法1:直接用GNU date命令(推荐)
大多数Linux发行版默认用的是GNU date,它能自动识别这种ISO格式,直接运行:
date -d "2019-03-08T17:35:44Z" +%s
执行后会输出对应的Epoch时间(这个例子的结果是1552066544)。
如果你的系统是BSD环境(比如嵌入式Linux或macOS),需要指定输入格式:
date -j -f "%Y-%m-%dT%H:%M:%SZ" "2019-03-08T17:35:44Z" +%s
这里-j表示不修改系统时间,-f用来定义输入的时间格式模板。
方法2:预处理字符串后转换(兼容性更强)
如果担心不同系统date命令的差异,可以先把字符串里的T换成空格、去掉Z,再用date处理:
echo "2019-03-08T17:35:44Z" | sed 's/T/ /; s/Z//' | xargs date -d {} +%s
要是用BSD date,就把后面的date -d {} +%s换成date -j -f "%Y-%m-%d %H:%M:%S" {} +%s就行。
内容的提问来源于stack exchange,提问作者sebastian
相关产品推荐
相关产品推荐

