Как рассчитать предыдущий месяц и год по строке в Bash - PullRequest
1 голос
/ 09 июля 2020

При вводе value с сегодняшней датой 2020 07 08 03: 00 в виде строки:

value="202007080300"

Я хотел бы go впереди и объявить две другие строки переменные. Первая переменная start будет первым днем ​​предыдущего месяца. Вторая переменная end будет первым днем ​​того же месяца, в котором хранится переменная value, например, она будет здесь:

start="202006010300"
end="202007010300"

Это выглядит просто, пока вы не подумаете, что произойдет, если * Переменная 1013 * хранит первое или последнее число месяца, например:

value="202001020300"

или

value="198612090000"

Решение должно работать с любыми входными значениями. Как заставить работать?

1 Ответ

2 голосов
/ 09 июля 2020

Предполагается, что строка даты / времени в правильном формате, в чистом виде bash:

datetime="202007080300"

startyear=${datetime:0:4}
startmonth=${datetime:4:2}
startmonth=${startmonth#0}
startmonth=$((startmonth - 1))
if ((startmonth == 0)); then
    startmonth=12
    startyear=$((startyear - 1))
fi

printf -v start "%d%02d%02d%s" "$startyear" "$startmonth" 1 "${datetime:8}"
end="${datetime:0:6}01${datetime:8}"

echo "date  = $datetime"
echo "start = $start"
echo "end   = $end"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...