Получить дату (за день до текущего времени) в Баш - PullRequest
153 голосов
/ 10 ноября 2009

Как я могу напечатать дату за день до текущего времени в Bash?

Ответы [ 16 ]

1 голос
/ 10 ноября 2009
yesterday=`date -d "-1 day" %F`

Переводит вчерашнюю дату в формате ГГГГ-ММ-ДД в переменную $yesterday.

1 голос
/ 10 ноября 2009
#!/bin/bash
OFFSET=1;
eval `date "+day=%d; month=%m; year=%Y"`
# Subtract offset from day, if it goes below one use 'cal'
# to determine the number of days in the previous month.
day=`expr $day - $OFFSET`
if [ $day -le 0 ] ;then
month=`expr $month - 1`
if [ $month -eq 0 ] ;then
year=`expr $year - 1`
month=12
fi
set `cal $month $year`
xday=${$#}
day=`expr $xday + $day`
fi
echo $year-$month-$day
0 голосов
/ 19 марта 2018

Не очень сексуально, но может выполнять работу:

perl -e 'my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time - 86400);$year += 1900; $mon+= 1; printf ("YESTERDAY: %04d%02d%02d \n", $year, $mon, $mday)'

Создано из ответа "Мартина Клейтона".

0 голосов
/ 12 марта 2014

Решение с учетом DST:

Управление часовым поясом возможно для изменения часов на несколько часов. Из-за перехода на летнее время 24 часа назад может быть сегодня или позавчера.

Вы уверены, что вчера 20 или 30 часов назад. Который из? Ну, самый последний, которого нет сегодня.

echo -e "$(TZ=GMT+30 date +%Y-%m-%d)\n$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1

Параметр -e, используемый в команде echo, необходим для bash, но не будет работать с ksh. В ksh вы можете использовать ту же команду без флага -e.

Когда ваш скрипт будет использоваться в разных средах, вы можете запустить скрипт с помощью #! / Bin / ksh или #! / Bin / bash. Вы также можете заменить \ n символом новой строки:

echo "$(TZ=GMT+30 date +%Y-%m-%d)
$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1
0 голосов
/ 02 июля 2013

Попробуйте приведенный ниже код, который также заботится о части DST.

if [ $(date +%w) -eq $(date -u +%w) ]; then
  tz=$(( 10#$gmthour - 10#$localhour ))
else
  tz=$(( 24 - 10#$gmthour + 10#$localhour ))
fi
echo $tz
myTime=`TZ=GMT+$tz date +'%Y%m%d'`

Кортси Ансгар Вичерс

0 голосов
/ 10 ноября 2009
date +%Y:%m:%d|awk -vFS=":" -vOFS=":" '{$3=$3-1;print}'
2009:11:9
...