Я работаю в ОС Sun, я хочу, чтобы мой скрипт считывал дату из файла (в формате %Y%m%d) и добавлял 1 день к этой дате

Я работаю в Sun Среда ОС, я хочу добавить функциональность к моему существующему сценарию unix ksh, где он позволяет считывать дату (в формате %Y%m%d) из файла, добавлять 1 день и переписывать то же самое в этот файл. [обратите внимание: не добавляя день к текущей дате, вместо этого я хочу добавить 1 день к дате i/p, присутствующей в файле]. Например: DateFile.dat 20200620 Я хочу, чтобы мой скрипт изменил его на 20200621 в конце выполнения. Однако я получаю сообщение об ошибке при добавлении 1 дня к моей переменной, содержащей дату i/p. Мой код, как показано ниже:

#!/bin/ksh
ip_dte</home/{file_Path}
echo $ip_dte
dte_add=`TZ=AEST-24 "$ip_dte"`
echo $dte_add
0
29.06.2020, 13:28
2 ответа

Если вы используете что-то вроде TZ=XXX-24, это использует XXXв качестве имени нового часового пояса и GMT+24в качестве смещения часового пояса.

Если вам нравится получать то, что вам нравится, например. для европейского летнего времени необходимо указать MET-26, для европейского зимнего времени MET-25.

-1
18.03.2021, 23:23

Вы можете довольно легко вычислить дату завтрашнего дня с помощью cal, инструмента календаря. Это функция bash, но ее нетрудно переписать

.
tomorrow() {
    local y=$1 m=${2#0} d=${3#0}

    ((++d))
    if cal $m $y | xargs | sed -e 's/$/ X/' -e 's/   */ /g' | grep -v " ${d#0} " >/dev/null
    then
        d=1
        [[ $((++m)) -gt 12 ]] && m=1 && ((++y))
    fi
    printf "%d %d %d\n" $y ${m#0} ${d#0}
}

Вооружившись этим, можно очень легко вычислить дату завтрашнего дня

# Get today's date into $y $m $d
IFS='-' read -r y m d <<<"2020-06-29"; echo y=$y m=${m#0} d=${d#0}
y=2020 m=6 d=29

tomorrow $y $m $d
2020 6 30

Некоторые другие примеры с произвольными датами

tomorrow 2020 6 30
2020 7 1

tomorrow 2020 2 28
2020 2 29

tomorrow 2019 2 28
2019 3 1

Вот дополнительная функция

yesterday() {
    local y=$1 m=${2#0} d=${3#0}

    if [[ $((--d)) -eq 0 ]]
    then
        # Go back one month and find the last day
        [[ $((--m)) -eq 0 ]] && ((--y)) && m=12
        d=$(cal ${m#0} $y | xargs | awk '{print $NF}')
    fi
    printf "%d %d %d\n" $y ${m#0} ${d#0}
}
0
18.03.2021, 23:23

Теги

Похожие вопросы