我想知道如何在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
$