Я работаю в 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
Если вы используете что-то вроде TZ=XXX-24
, это использует XXX
в качестве имени нового часового пояса и GMT+24
в качестве смещения часового пояса.
Если вам нравится получать то, что вам нравится, например. для европейского летнего времени необходимо указать MET-26
, для европейского зимнего времени MET-25
.
Вы можете довольно легко вычислить дату завтрашнего дня с помощью 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}
}