如何使用mktime以毫秒为单位更改时间信息。保留?

lsunt 发布于 6 天前 awk 最后更新 6 天前 11 浏览

例如 我想将13.29s添加到2013-4-24 3:10:50.50 如何处理毫秒? 我试过使用mktimestrftime,但似乎只能处理秒...

已邀请:

set

赞同来自:

这不是一件简单的事,但我们走了:

time="2013-4-24 3:10:50.50"
echo "13.29" | awk '{split(v,a,"[ -:.]");t=mktime(a[1]" "a[2]" "a[3]" "a[4]" "a[5]" "a[6])+(a[7]/100)+$1;print strftime("%Y-%m-%d %H:%M:%S",t)"."(t-int(t))*100}' v="$time"
2013-04-24 03:11:03.79

有解释
echo "13.29" | awk '
    {
    split(v,a,"[ -:.]")                                                 # Split the date string into separate parts
    t=mktime(a[1]" "a[2]" "a[3]" "a[4]" "a[5]" "a[6])+(a[7]/100)+$1     # Convert to epoch time and add milliseconds and calcualte the new value
    print strftime("%Y-%m-%d %H:%M:%S",t)"."(t-int(t))*100              # Convert back to normal time format and print it out
    }
    ' v="$time"                                                         # Read the variable

beos

赞同来自:

awk真的是一个强大的工具,但我不认为awk是最好的选择,我会选择gnu date。 使用您的示例数据查看测试:

#add 13.29s to date 2013-4-24 3:10:50.50
kent$  date -d'+13.29 second 2013-4-24 3:10:50.50' +"%F %T.%N"
2013-04-24 03:11:03.790000000
我知道有纳秒秒的尾随零。但是我想如果你想删除它们就不会有问题。 如果使用awk是必须的,你可以从awk调用外部命令。