猛击几分钟到5分钟

use*_*380 6 bash timestamp

我们有这个字符串以干净的格式检索日期和时间.

 TIMESTAMP=$(date "+%Y%m%d%H%M")
Run Code Online (Sandbox Code Playgroud)

是否有一些内联代码可以用来将分钟缩小到5分钟.因此,如果它是12:03,它将使它成为12:00,如果它是12:49,它将是12:45

谢谢!

Jos*_*lly 6

要执行此操作,您可以从总分钟中减去模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)

  • 我不喜欢比赛条件 (2认同)

fed*_*qui 5

您可以使用整数除法并乘回来来获得舍入值。

$ 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)


gle*_*man 5

一些字符串操作:

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

  • 我最喜欢它,因为它是可移植的,并且只调用一次date。 (2认同)

hro*_*tyr 5

不完全是 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)

免责声明:我是该项目的作者。