Как указано в Poshi , ваш скрипт использовал дату 2020-19-19
, которой не существует. Как только мы это исправим, мы будем очень близки. Осталось сделать только три вещи:
-d "isoFormatWithoutTimezome + 3 seconds
, похоже, неверно интерпретируется как
-d "(isoFormat withTimezone='+3') seconds"
. При такой интерпретации завершающий seconds
на самом деле не имеет смысла, но, кажется, добавляет одну секунду к дате. Чтобы предотвратить ложную интерпретацию как часовой пояс, укажите часовой пояс после даты и перед + 3 seconds
:
-d "2020-19-19T00:35:00Z + 3 seconds"
.
Установка часового пояса для вывода возможна с помощью Переменная окружения date
TZ
. Для UT C мы можем установить TZ
как пустую строку.
date -I
показывает UT C как +00:00
вместо Z
. Чтобы изменить выходной формат, мы могли бы либо указать настраиваемую строку даты +...Z
, либо просто выполнить замену строки sed s/+00:00$/Z/
.
Кстати: предпочтительное соглашение об именах для переменных в bash равно НЕ ALLCAPS, поскольку переменные allcaps по соглашению являются переменными среды и имеют высокую вероятность столкновения с уже существующими переменными среды.
#! /usr/bin/env bash
repeat=5 # does 6 repeats! (retained behavior from your original script)
for ((run = 0; run <= repeat; run++)); do
date=$(TZ= date -Is -d "2020-12-19T00:35:00Z + $((run * 300)) sec" | sed 's/+00:00$/Z/')
echo "$date"
# do stuff
done
печатает
2020-12-19T00:35:00Z
2020-12-19T00:40:00Z
2020-12-19T00:45:00Z
2020-12-19T00:50:00Z
2020-12-19T00:55:00Z
2020-12-19T01:00:00Z