为了账号安全,请及时绑定邮箱和手机立即绑定

在bash中转换日期格式

/ 猿问

在bash中转换日期格式

慕仰0522570 2019-12-25 14:51:18

我有这样的日期格式:“ 2011年6月27日”,我想将其转换为20110627

可以用bash做吗?


查看完整描述

3 回答

?
慕哥9229398

#since this was yesterday

date -dyesterday +%Y%m%d


#more precise, and more recommended

date -d'27 JUN 2011' +%Y%m%d


#assuming this is similar to yesterdays `date` question from you 

#http://stackoverflow.com/q/6497525/638649

date -d'last-monday' +%Y%m%d


#going on @seth's comment you could do this

DATE="27 jun 2011"; date -d"$DATE" +%Y%m%d


#or a method to read it from stdin

read -p "  Get date >> " DATE; printf "  AS YYYYMMDD format >> %s"  `date

-d"$DATE" +%Y%m%d`    


#which then outputs the following:

#Get date >> 27 june 2011   

#AS YYYYMMDD format >> 20110627


#if you really want to use awk

echo "27 june 2011" | awk '{print "date -d\""$1FS$2FS$3"\" +%Y%m%d"}' | bash


#note | bash just redirects awk's output to the shell to be executed

#FS is field separator, in this case you can use $0 to print the line

#But this is useful if you have more than one date on a line

有关日期的更多信息


请注意,这仅适用于GNU日期


我读过:


-d可以通过替换sunfreeware.com版本的日期来解决无法支持的Solaris版本的日期


查看完整回答
反对 回复 2019-12-25
?
HUWWW

在OSX上,我使用-f来指定输入格式,使用-j来不尝试设置任何日期,并使用输出格式说明符。例如:


$ date -j -f "%m/%d/%y %H:%M:%S %p" "8/22/15 8:15:00 am" +"%m%d%y"

082215

你的例子:


$ date -j -f "%d %b %Y" "27 JUN 2011" +%Y%m%d

20110627


查看完整回答
反对 回复 2019-12-25
?
www说

只用bash:


convert_date () {

    local months=( JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC )

    local i

    for (( i=0; i<11; i++ )); do

        [[ $2 = ${months[$i]} ]] && break

    done

    printf "%4d%02d%02d\n" $3 $(( i+1 )) $1

}

然后像这样调用它


d=$( convert_date 27 JUN 2011 )

或者,如果“旧”日期字符串存储在变量中


d_old="27 JUN 2011"

d=$( convert_date $d_old )  # not quoted


查看完整回答
反对 回复 2019-12-25

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信