15 分钟间隔舍入参数作为指定格式的开始和结束时间

15 分钟间隔舍入参数作为指定格式的开始和结束时间

我想在调用java程序的shell脚本中传递参数...

例如,当前时间是 2011:02:23 01:05 那么我需要向下移动到最近的整个时间,例如 1:00(java 程序的开始时间参数),如果它是 1:05 和 1:15(java 程序的结束时间参数) )下面的时间戳我想根据当前时间动态传递给java程序。

通过 shell 脚本传递给 java 程序的示例参数(15 分钟间隔)。

java 2011:02:23 01:00(开始时间) 2011.02.23 01:15(结束时间)
java 2011.02.23 01:15(开始时间) 2011.02.23 01:30(结束时间)

我可以吗?或者有没有办法在 unix 中生成上述指定格式的日期和时间?

注意:这个日期:获取当前 15 分钟间隔不符合我的目的。

答案1

您可以使用以下命令获取比当前分钟数(或第一个参数中给出的分钟数)低 15 倍的分钟数:

a=$(date date -d "2011-02-23 01:05" +%-m)        # need only minutes.
a=${1:-"$a"}                   # or use the value from the first parameter.
a=${a#0}                       # remove one optional leading zero to
                               # avoid issues with 08 and 09.
b=$((a-a%15))                  # Round down to a 15 minutes multiple.
c=$((b+15))                    # end time

echo "$b $c"

如果您需要完整的日期字符串,请使用:

$ printf 'java %s%02d\n' "$(date -d "2011-02-23 01:05" +"%Y:%m:%d %H:")" "$b"
java 2011:02:23 01:00

或者,在 bash 中:

$ printf -v a '%(%s)T\n' -1
$ printf '%(java %Y-%m-%d %H:%M:%S)T\n' "$(( a - a % (60*15) ))"
java 2018-08-30 22:45:00

相关内容