我有一个历元时间戳列表,如下所示:
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/

10-09 01:27