我们有这个字符串以干净的格式检索日期和时间.
TIMESTAMP=$(date "+%Y%m%d%H%M")
Run Code Online (Sandbox Code Playgroud)
是否有一些内联代码可以用来将分钟缩小到5分钟.因此,如果它是12:03,它将使它成为12:00,如果它是12:49,它将是12:45
谢谢!
要执行此操作,您可以从总分钟中减去模5的分钟数.打印出来:
echo "$(date "+%Y%m%d%H%M") - ($(date +%M)%5)" | bc
Run Code Online (Sandbox Code Playgroud)
要将其保存到变量:
my_var=$(echo "$(date "+%Y%m%d%H%M") - ($(date +%M)%5)" | bc)
Run Code Online (Sandbox Code Playgroud)
这取决于您现在保留的日期格式字符串 - 一串数字.
示例输出:
$ date "+%Y%m%d%H%M"
201404010701
$ echo "$(date "+%Y%m%d%H%M") - ($(date +%M)%5)" | bc
201404010700
Run Code Online (Sandbox Code Playgroud)
您可以使用整数除法并乘回来来获得舍入值。
$ m=23
$ (( m /= 5, m *= 5 )) && echo $m
20
Run Code Online (Sandbox Code Playgroud)
整数除法仅返回结果的整数部分,因此在上面的情况下返回 4。然后乘以 5 得到 20。
在你的情况下:
$ TIMESTAMP=$(date "+%Y%m%d%H%M")
$ echo $TIMESTAMP
201404011231
$ (( TIMESTAMP /= 5, TIMESTAMP *= 5 ))
$ echo $TIMESTAMP
201404011230
$ TIMESTAMP=$(date "+%Y%m%d%H%M")
$ echo $TIMESTAMP
201404011257
$ (( TIMESTAMP /= 5, TIMESTAMP *= 5 ))
$ echo $TIMESTAMP
201404011255
Run Code Online (Sandbox Code Playgroud)
一些字符串操作:
case $TIMESTAMP in
*[1234]) TIMESTAMP=${TIMESTAMP%?}0;;
*[6789]) TIMESTAMP=${TIMESTAMP%?}5;;
esac
Run Code Online (Sandbox Code Playgroud)
${TIMESTAMP%?}删除最后一个字符。参考:http : //www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion
不完全是 bash,而是使用dateutils 的 dround实用程序,它归结为:
$ dround now -5m
2014-04-01T10:35:00
Run Code Online (Sandbox Code Playgroud)
或使用您的格式说明符:
$ dround now -5m -f '%Y%m%d%H%M'
201404011035
Run Code Online (Sandbox Code Playgroud)
免责声明:我是该项目的作者。