Получить дату (за день до текущего времени) в Баш
Как я могу напечатать дату, которая на день раньше текущего времени в Баш?





Ответы - Получить дату (за день до текущего времени) в Баш / Get the date (a day before current time) in Bash

10.11.2009 01:17:09
если у вас есть дата GNU и я вас правильно понял
$ date +%Y:%m:%d -d "yesterday"
2009:11:09
или
$ date +%Y:%m:%d -d "1 day ago"
2009:11:09





date_days_past () { days_past=${1:-0}; if ! date -v-${days_past}d +%Y%m%d 2>/dev/null; then date --date="-${days_past} day" +%Y%m%d; fi }

bash $(TZ=America/New_York date +%Y-%m-%d)


date: illegal option -- -

date
, доступную через пакет coreutils
, чтобы этот синтаксис работал на macOS. Если вы используете Homebrew , вы можете установить его через brew install coreutils
, после чего вы сможете использовать GNU date через
команду gdate. Смотрите: topbug.net/blog/2013/04/14/…

10.11.2009 01:18:47
#!/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



1 July , 2013
года, результат распечатывается 2013-6-1347
, в то время как ожидаемый результат 2013-6-30

echo $(cal $month $year)|tr ' ' '\n'|tail -n 1
"


10.11.2009 01:19:58
Advanced Bash-руководство по написанию сценариев
date +%Y:%m:%d -d "yesterday"
Дополнительные сведения о формате даты см. На странице справочника по дате
date --date='-1 day'




11.11.2009 01:24:21
Может быть, использовать Perl вместо этого?
perl -e 'print scalar localtime( time - 86400 ) . "\n";'
Или используйте nawk и (ab)use /usr / bin / adb:
nawk 'BEGIN{printf "0t%d=Y\n", srand()-86400}' | adb
Наткнулся и на это ... безумие!
/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= '/^time\(\)/ {gsub(/ /,"",$2);printf "0t%d=Y\n", $2-86400}' | adb



bash $(TZ=America/New_York date +%Y-%m-%d)

15.12.2011 06:34:36
Если у вас есть дата BSD (OSX)date
Или если вы хотите сделать вычисления даты на произвольную дату:
date -j -v-1d
Wed Dec 14 15:34:14 CET 2011


02.07.2013 03:56:12
Попробуйте приведенный ниже код, который также заботится о части 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'`
Courtsey Ансгар Wiechers

12.03.2014 04:50:58
Решение с учетом 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 или #!/ бин / Баш. Вы также можете заменить \n новой строкой:
echo "$(TZ=GMT+30 date +%Y-%m-%d)
$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1

18.08.2017 10:05:02
MAC OSX
За вчерашний день:
date -v-1d +%F
где 1d определяет текущий день минус 1 день. Аналогично,
дата-v-1w +%F-для даты предыдущей недели
дата-v-1m +%F-для даты предыдущего месяца
ЕСЛИ У ВАС ЕСТЬ ДАТА GNU,
date --date="1 day ago"
Дополнительная информация: https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html

19.03.2018 06:12:39
Не очень сексуально, но может сделать свою работу.:
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)'
Составлено из ответа "Мартин Клейтон".

14.06.2019 08:06:49
Вы можете сделать простой расчет, скомпонованный с регулярным выражением, если выбран формат даты "YYYYMM":
echo $(($(date +"%Y%m") - 1)) | sed -e 's/99$/12/'
В январе 2020 года он вернется 201912 ;-) Но, это только обходной путь, когда дата не имеет вариантов расчета и другие параметры dateinterpreter (например, с помощью perl) не доступны ;-)

19.01.2020 04:24:00
date -d "yesterday" '+%Y-%m-%d'
или
date=$(date -d "yesterday" '+%Y-%m-%d')
echo $date

date: illegal option: -d
на Solaris. Ваш ответ, который опирается на непереносимые расширения GNU к утилите POSIX-standard date
для вопроса о платформе Solaris, отличной от GNU.