首页 > 解决方案 > 计算 5 分钟上限

问题描述

操作系统:Red Hat Enterprise Linux Server 7.2(迈坡)

我想将时间四舍五入到最接近的 5 分钟,只向上,而不是向下,例如:

08:09:15 应该是 08:10:00

08:11:26 应该是 08:15:00

08:17:58 应该是 08:20:00

我一直在尝试:

(date -d @$(( (($(date +%s) + 150) / 300) * 300)) "+%H:%M:%S")

这将缩短时间但也会缩短(08:11:18 将导致 08:10:00 而不是 08:15:00)

知道我怎么能做到这一点吗?

标签: linuxbashdateredhat

解决方案


您可以使用此实用程序函数进行四舍五入:

roundDt() {
   local n=300
   local str="$1"
   date -d @$(( ($(date -d "$str" '+%s') + $n)/$n * $n)) '+%H:%M:%S'
}

然后调用这个函数:

roundDt '08:09:15'
08:10:00    

roundDt '08:11:26'
08:15:00

roundDt '08:17:58'
08:20:00

-x要在导出后跟踪此函数如何计算使用(跟踪模式):

export -f roundDt

bash -cx "roundDt '08:11:26'"

+ roundDt 08:11:26
+ typeset n=300
+ typeset str=08:11:26
++ date -d 08:11:26 +%s
+ date -d @1535631300 +%H:%M:%S
08:15:00

推荐阅读