上下舍入当前时间



我想知道如何在bash中将当前小时四舍五入到该小时的开始和下一个小时?

例如,如果我运行脚本:

/printHour.sh

假设当前执行时间是13:04:12-它将打印

current hour is: 13:00:00 
next hour is: 14:00:00

到目前为止的进展:(但这在1小时前就给出了,所以不起作用(-有什么想法吗?

lastHour=$(date -d '1 hour ago' "+%H:%M:%S")
echo "current hour is: "$lastHour

您可以使用以下实用程序函数:

hrdt() { date -d "${1?} hour ago" '+%H:00:00'; }

测试:

> hrdt
bash: 1: parameter not set
> hrdt 0
08:00:00
> hrdt 1
07:00:00
> hrdt 2
06:00:00
> hrdt 3
05:00:00

你能试一下以下内容吗?根据所示的示例编写和测试,我的date是GNU日期版本。

cat script.bash
#!/bin/bash   
currentHour=$(date "+%H:00:00")
nextHour=$(date -d '+1 hour' "+%H:00:00")
echo "current hour is: $currentHour"
echo "next hour is: $nextHour"

当我运行上面的脚本时,我得到如下:

current hour is: 06:00:00
next hour is: 07:00:00

看起来你不需要任何特别的东西,所以这应该做到:

date -d '1 hour ago' "+%H:00:00"

当您想要恰好%M%S都为零的小时时,为什么要麻烦呢?

在这种情况下,您不需要date;如下所示,内置的printf也可以生成格式化的日期-时间字符串。这里-1表示当前时间,EPOCHSECONDS是一个动态变量,它扩展到自epoch以来的秒数。

$ printf 'current hour is: %(%H)T:00:00n' -1
current hour is: 17:00:00
$
$ printf 'next hour is: %(%H)T:00:00n' $((EPOCHSECONDS + 3600))
next hour is: 18:00:00

使用awk、

$ awk ' BEGIN { st=systime(); 
print "current hour=" strftime("%F %H:00:00",st); 
print "next hour=" strftime("%F %H:00:00",st+(60*60)) } '
current hour=2020-12-26 23:00:00
next hour=2020-12-27 00:00:00
$

相关内容

  • 没有找到相关文章

最新更新