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

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

Ответы [ 16 ]

246 голосов
/ 10 ноября 2009

если у вас дата GNU и я вас правильно понял

$ date +%Y:%m:%d -d "yesterday"
2009:11:09

или

$ date +%Y:%m:%d -d "1 day ago"
2009:11:09
47 голосов
/ 15 декабря 2011

Если у вас BSD (OSX) date, вы можете сделать это следующим образом:

date -j -v-1d
Wed Dec 14 15:34:14 CET 2011

Или, если вы хотите вычислить дату на произвольную дату:

date -j -v-1d -f "%Y-%m-%d" "2011-09-01" "+%Y-%m-%d"
2011-08-31
40 голосов
/ 10 ноября 2009
date --date='-1 day'
10 голосов
/ 18 августа 2017

MAC OSX

На вчерашнюю дату:

date -v-1d +%F

где 1d определяет текущий день минус 1 день. Точно так же, * * +1010

дата -v-1w +% F - для даты предыдущей недели

дата -v-1m +% F - для даты предыдущего месяца

ЕСЛИ У ВАС ГНУ ДАТА,

date --date="1 day ago"

Подробнее: https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html

7 голосов
/ 04 июня 2013

Ну, это поздний ответ, но, похоже, это работает !!

     YESTERDAY=`TZ=GMT+24 date +%d-%m-%Y`;
     echo $YESTERDAY;
5 голосов
/ 10 ноября 2009

Руководство по расширенному написанию сценариев Bash

date +%Y:%m:%d -d "yesterday"

Подробнее о формате даты см. Справочную страницу для date

date --date='-1 day'
3 голосов
/ 11 ноября 2009

Извините, не упоминая меня в системе Solaris. Таким образом, параметр -date недоступен в Solaris bash.

Я обнаружил, что могу получить предыдущую дату с небольшим фокусом на часовом поясе.

DATE=`TZ=MYT+16 date +%Y-%m-%d_%r`
echo $DATE
3 голосов
/ 11 ноября 2009

Возможно, вы используете Perl?

perl -e 'print scalar localtime( time - 86400 ) . "\n";'

Или используйте nawk и (ab) используйте / 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
1 голос
/ 14 июня 2019

Вы можете выполнить простой расчет, используя регулярное выражение, если выбран формат даты «ГГГГММ»:

echo $(($(date +"%Y%m") - 1)) | sed -e 's/99$/12/'

В январе 2020 года вернется 201912 ;-) Но это только обходной путь, когда у даты нет опций вычисления и другие опции интерпретатора даты (например, с использованием perl) недоступны; -)

1 голос
/ 10 ноября 2009

</p> <pre><code>date --date='-1 day'

...