如何在Bash中通过for循环将日期列表转换为yyyymmdd格式
Bash批量转换日期为yyyymmdd格式
单个日期转换
如果你需要把单个日期字符串(比如Tue Apr 9 16:19:48 IST 2019)转换成yyyymmdd(比如20190409)格式,直接执行这条命令即可:
date -d " Tue Apr 9 16:19:48 IST 2019 " "+%Y%m%d"
批量转换日期列表
如果你的日期都存在一个名为create_time的文件里(每行一个日期字符串),可以用Bash的for循环批量处理,这里有两种适配不同系统的脚本方案:
方案1:适用于Linux系统
Linux下的date命令支持-d参数解析任意日期字符串,脚本如下:
for i in $(cat create_time); do date -d " $i " "+%Y%m%d"; done
小提示:如果你的日期字符串包含空格(比如示例里的格式),用
$(cat create_time)可能会按空格拆分字段,导致每个部分被单独处理。这种情况下更推荐用while read循环来避免拆分问题:while read -r date_str; do date -d "$date_str" "+%Y%m%d"; done < create_time
方案2:适用于BSD/macOS系统
BSD系(比如macOS)的date命令参数逻辑不同,需要用-j(不修改系统时间)和-f(指定输入格式),脚本如下:
for i in $(cat create_time); do date -j -f "%a %b %d %T %Z %Y" "$i" "+%Y%m%d"; done
注意:
-f后面的格式串必须和你输入的日期格式完全匹配,示例里的%a %b %d %T %Z %Y刚好对应Tue Apr 9 16:19:48 IST 2019这种格式。如果你的日期格式有差异,需要调整格式串的参数。
不管用哪种方案,最终输出的日期都会是20190409这种标准的yyyymmdd格式。
内容的提问来源于stack exchange,提问作者Rahul Kumar Jaiswal
相关产品推荐
相关产品推荐

