Linux Shell脚本:如何指定格式将%y/%m/%d %H:%M:%S字符串转为时间戳?
解决Linux下指定日期格式转换为时间戳的问题
嘿,我明白你的困扰!Linux上的GNU date命令和OS X里的BSD版本确实不一样,没有-j -f这种直接指定输入格式的参数,但咱们有几种替代方案能解决这个问题:
方法1:先转换日期格式再用GNU date处理
GNU date对YYYY-MM-DD HH:MM:SS或者MM/DD/YYYY HH:MM:SS这类格式识别很友好,所以我们可以用文本处理工具(比如sed)把你的%y/%m/%d %H:%M:%S格式转换成它能识别的样式:
date -d "$(echo '18/04/25 16:04:00' | sed -E 's/([0-9]{2})\/([0-9]{2})\/([0-9]{2})/20\1-\2-\3/')" "+%s"
解释一下这个命令:
sed的正则表达式把18/04/25替换成2018-04-25,补全了年份的前两位- 转换后的字符串传给
date -d,就能正常输出对应的时间戳了
方法2:用Python跨平台处理
Python的datetime模块可以直接指定输入格式解析日期,写法更直观,而且跨平台通用:
Python 3版本:
python3 -c "from datetime import datetime; print(datetime.strptime('18/04/25 16:04:00', '%y/%m/%d %H:%M:%S').timestamp())"
Python 2版本(如果还在用的话):
Python 2的datetime没有timestamp()方法,需要用strftime间接转换:
python -c "from datetime import datetime; print(int(datetime.strptime('18/04/25 16:04:00', '%y/%m/%d %H:%M:%S').strftime('%s')))"
方法3:用dateutils工具(需要额外安装)
如果你的系统可以安装第三方工具,dateutils里的dateparse命令完美支持指定输入格式,用法和OS X的date -j -f几乎一致:
先安装(以Debian/Ubuntu为例):
sudo apt install dateutils
然后执行转换:
dateparse -i '%y/%m/%d %H:%M:%S' -o '%s' '18/04/25 16:04:00'
这样就能直接得到你想要的时间戳啦!
内容的提问来源于stack exchange,提问作者Khaino
相关产品推荐
相关产品推荐

