Bash:将 unix 时间四舍五入到最接近人类可读格式的分钟
Bash: Rounding up unix time to the nearest minute in human readable format
我有一个纪元时间戳列表,如下所示:
1481842799,1481842859,.....
到目前为止,我设法使用 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 至 20161216000000、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 以截断 down 到最接近的分钟,有点像chepner在评论中的建议。
date '+%Y%m%d%H%M%S' -d "@$(( ((1481842799 + 59) / 60) * 60))"
20161216043000
加59而不是60,意思是当原值已经是60的倍数时,不向上取整
我有一个纪元时间戳列表,如下所示:
1481842799,1481842859,.....
到目前为止,我设法使用 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 至 20161216000000、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 以截断 down 到最接近的分钟,有点像chepner在评论中的建议。
date '+%Y%m%d%H%M%S' -d "@$(( ((1481842799 + 59) / 60) * 60))"
20161216043000
加59而不是60,意思是当原值已经是60的倍数时,不向上取整