我有一个格式为2012-12-20T01:16:02.05的日期字符串,我想转换为格式2011-12-20-01.16.02.050000
目前,我正在进行如下操作
format = "%F-%H.%M.%S.%N"
split(stringinput,input,"T");
split(input[1],date,"-")
split(input[2],time,":")
return strftime(format,mktime(date[1] " " date[2] " " date[3] " " time[1] " " time[2] " " time[3] " " time[4]));
但我正在丢失微秒信息或毫秒信息。我怎么才能得到它。返回2011-12-20-01.16.02。%N
还有任何使字符串解析更通用的建议。目前它只支持一种格式。
谢谢。
发布于 2013-02-21 20:19:45
为什么要使用mktime()?您所描述的更改只是一个文本更改:
$ echo "2012-12-20T01:16:02.05" | awk '{sub(/T/,"-"); gsub(/:/,"."); print $0 "0000"}'
2012-12-20-01.16.02.050000
我假设这只是一个打字错误,当你在你的输出中将2012更改为2011。
发布于 2019-05-31 05:39:52
因为我希望我的GNU日期精度与awk匹配,所以我必须执行以下操作:
x='2019-05-30 14:09:20.074'
echo $x | awk '{split($1,a,"-");;split($2,b,".");split(b[1],c,":");s=a[1]" "a[2]" "a[3]" "c[1]" "c[2]" "c[3];tt=mktime(s);print tt b[2] "000000"}'
1559196560074000000
date --date=$x +'%s%N'
1559196560074000000
现在,我能够将这两种方法达成一致,我现在可以在awk中进行比较逻辑了。
https://stackoverflow.com/questions/14995317
复制相似问题