如何将时间从hh:mm:ss分解为hh mm ss in unix?

Ved*_*edh 1 bash awk date

我的意见是

 ./filename Apr 11 16 05:10:20 Jun 12 16 06:22:35
Run Code Online (Sandbox Code Playgroud)

我想转换Apr 11 16 05:10:2016 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;
Run Code Online (Sandbox Code Playgroud)

但我得到的输出16 04 11 05 00 0016 06 12 06 00 00.我其实我想要16 04 11 05 10 2016 06 12 06 22 35.

我怎么修改这个?

sat*_*sat 7

您可以使用date命令本身来完成它.

date -d 'Apr 11 2016 05:10:20' '+%y %m %d %H %M %S'
Run Code Online (Sandbox Code Playgroud)

测试:

$ 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
Run Code Online (Sandbox Code Playgroud)

注:在这里,输入的日期格式有一年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'
Run Code Online (Sandbox Code Playgroud)