我有一个历元时间戳列表,如下所示:
14818427991481842859,…
到目前为止,我设法使用date命令将这次转换为人类可读的格式,如下所示:
date '+%Y%m%d%H%M%S' -d @1481842799
20161215235959
date '+%Y%m%d%H%M%S' -d @1481842859
20161216000059
或
date '+%Y%m%d%H%M%S' --date='@1481842799'
20161215235959
如何使用date命令将这些时间四舍五入到最接近的分钟,如下所示?以下内容:
20161215235959至2016121600000,20161216000059至20161216000100
尝试了以下操作,但不起作用:
date '+%Y%m%d%H%M%S' --date='@1481842799 + 1 seconds'
date: invalid date `@1481842799 + 1 seconds'
最佳答案
您使用的是GNU date
,从-d
标志可以明显看出。如果您的意图是将一秒增加到EPOCH
时间,请使用bash
算术运算符$(())
按如下方式执行
date '+%Y%m%d%H%M%S' -d "@$((1481842799 + 1))"
20161216043000
即使不递增,也可以将双引号用作
date '+%Y%m%d%H%M%S' -d "@$((1481842799))"
20161216042959
这和
date '+%Y%m%d%H%M%S' -d @1481842799
20161216042959
作为另一种建议,为了四舍五入到最接近的一分钟,你最好加上59,然后除以60,再乘以60,将其截短到最接近的一分钟,有点像评论中的chepner建议。
date '+%Y%m%d%H%M%S' -d "@$(( ((1481842799 + 59) / 60) * 60))"
20161216043000
加59而不是60意味着当原始值已经是60的倍数时,它将不会被取整。
关于linux - Bash:以人类可读的格式将Unix时间四舍五入到最接近的分钟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41260397/