Linux Bash:以人类可读的格式将unix时间四舍五入到最接近的分钟
我有一个历元时间戳列表,如下所示: 14818427991481842859 到目前为止,我设法使用date命令将这次转换为人类可读的格式,如下所示:Linux Bash:以人类可读的格式将unix时间四舍五入到最接近的分钟,linux,bash,date,unix-timestamp,epoch,Linux,Bash,Date,Unix Timestamp,Epoch,我有一个历元时间戳列表,如下所示: 14818427991481842859 到目前为止,我设法使用date命令将这次转换为人类可读的格式,如下所示: date '+%Y%m%d%H%M%S' -d @1481842799 20161215235959 date '+%Y%m%d%H%M%S' -d @1481842859 20161216000059 或 如何使用date命令将该时间四舍五入到最接近的分钟,如下所示: 20161215235959至2016121600000、2016121
date '+%Y%m%d%H%M%S' -d @1481842799
20161215235959
date '+%Y%m%d%H%M%S' -d @1481842859
20161216000059
或
如何使用date命令将该时间四舍五入到最接近的分钟,如下所示:
20161215235959至2016121600000、20161216000059至20161216000100
尝试了以下操作,但不起作用:
date '+%Y%m%d%H%M%S' --date='@1481842799 + 1 seconds'
date: invalid date `@1481842799 + 1 seconds'
您使用的是
GNU日期
,从-d
标志中可以明显看出。如果您打算将EPOCH
时间增加1秒,请使用bash
算术运算符$(())
即使不增加,也可以使用双引号作为
date '+%Y%m%d%H%M%S' -d "@$((1481842799))"
20161216042959
这和
date '+%Y%m%d%H%M%S' -d @1481842799
20161216042959
作为另一个建议,要将其四舍五入到最近的一分钟,最好先加59,然后除以60,再将其截断到最近的一分钟,有点像评论中的建议
date '+%Y%m%d%H%M%S' -d "@$(( ((1481842799 + 59) / 60) * 60))"
20161216043000
将59而不是60相加意味着,当原始值已经是60的倍数时,它将不会被四舍五入。您知道所有的时间戳都对应于59秒的时间,因此四舍五入就像将一秒相加一样简单吗?(例外:您需要考虑闰秒吗?)或者第二个字段是否具有任意值,您是否需要实际将其舍入到下一分钟?我尝试添加1秒,但正如您所看到的,我无法使用date命令。如果我具有任意秒数,也能知道如何将其舍入,那将非常好。不确定date命令是否支持此类功能。@是的,它支持!
date '+%Y%m%d%H%M%S' -d @1481842799
20161216042959
date '+%Y%m%d%H%M%S' -d "@$(( ((1481842799 + 59) / 60) * 60))"
20161216043000