Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash:以人类可读的格式将unix时间四舍五入到最接近的分钟_Linux_Bash_Date_Unix Timestamp_Epoch - Fatal编程技术网

Linux Bash:以人类可读的格式将unix时间四舍五入到最接近的分钟

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

我有一个历元时间戳列表,如下所示:

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、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