我的输入是
./filename Apr 11 16 05:10:20 Jun 12 16 06:22:35
我想将Apr 11 16 05:10:20
转换为16 04 11 05 10 20
我正在使用以下功能,
convert_date_2()
{
local months=( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec )
local i
for (( i=0; i<11; i++ ))
do
[[ $1 = ${months[$i]} ]] && break
done
printf "%2d %02d %02d %02d %02d %02d \n" $3 $(( i+1 )) $2 $4 $5 $6
}
Start=$( convert_date_2 $1 $2 $3 $4 )
Stop=$( convert_date_2 $5 $6 $7 $8 )
echo $Start;
echo $Stop;
但我得到的输出有16 04 11 05 00 00
和16 06 12 06 00 00
。我其实我想要16 04 11 05 10 20
和16 06 12 06 22 35
。
我该如何修改?
答案 0 :(得分:7)
您只需使用date
命令本身即可。
date -d 'Apr 11 2016 05:10:20' '+%y %m %d %H %M %S'
<强>测试强>
$ date -d 'Apr 11 2016 05:10:20' '+%y %m %d %H %M %S'
16 04 11 05 10 20
$ var_date="Jun 12 2016 06:22:35"
$ date -d "$var_date" '+%y %m %d %H %M %S'
16 06 12 06 22 35
注意:此处,输入日期格式的年份为2016
而不是16
。
<强>更新强>
试试这个:
$ var_date="Jun 12 16 06:22:35"
$ date -d "$(echo $var_date | awk '$3="20"$3')" '+%y %m %d %H %M %S'
$ date -d "$(awk '$3="20"$3' <<< $var_date)" '+%y %m %d %H %M %S'
答案 1 :(得分:1)
您可以将代码更改为:
convert_date_2() {
local months='JanFebMarAprMayJunJulAugSepOctNovDec'
local p="${months%$1*}"
printf "%2d %02d %02d %s\n" $3 $(( ${#p} / 3 +1)) $2 "${4//:/ }"
}
start=$(convert_date_2 $1 $2 $3 $4)
stop=$(convert_date_2 $5 $6 $7 $8)
echo "start=$start"
echo "sop=$stop"
调用新函数的示例:
convert_date_2 Apr 11 16 05:10:20
16 04 11 05 10 20