通过shell添加现有自定义日期格式的分钟

时间:2016-03-19 08:58:21

标签: bash shell date scripting sh

我遇到的问题是使用自定义日期格式,例如date +%y%j.%H%M%S

我想要的是在此日期仅在系统的当前日期添加15分钟。这样我就可以用来进一步计算我的过程了。

我尝试使用以下代码 -

$uprBond=`date +%y%j.%H%M%S`
$ echo $uprBond
16079.031135
$ date -d "$(uprBond) + 5 minutes" +%y%j.%H%M%S
  

op> bash:uprBond:找不到命令

     

16079.035920

我在通过上述日期格式时失败了,任何人都可以帮忙解决这个问题。

请注意,下面是当我使用日期函数而不是定义的日期变量时,代码片段正在工作,即$ uprBond (我不想使用预定义的日期,因为我们有一些旧格式相同需要添加分钟的日期。

date +%y%j.%H%M%S -d "`date` + 5 minutes";
  

op> 16079.040724

1 个答案:

答案 0 :(得分:2)

使用GNU日期,GNU bash 4及其Parameter Expansion

#!/bin/bash

uprBond="$(date +%y%j.%H%M%S)"

year="20${uprBond:0:2}"                 
doy="${uprBond#${uprBond:0:2}}"
doy="${doy%.*}"                         
time="${uprBond#*.}"
time="${time:0:2}:${time:2:2}:${time:4:2}"
in5min=$(date -d "${year}-01-01 +${doy} days -1 day +5 minutes ${time}" "+%y%j.%H%M%S")

echo "now:     $uprBond"
echo "in 5min: $in5min"

输出:

now:     16079.145026
in 5min: 16079.145526