Pobierz datę (dzień przed bieżącym czasem) w Bash

Jak mogę wydrukować datę, która jest dzień przed bieżącym czasem w Bash?

Author: martin clayton, 2009-11-10

15 answers

Jeśli masz datę GNU i dobrze Cię zrozumiałem

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

Lub

$ date +%Y:%m:%d -d "1 day ago"
2009:11:09
 217
Author: ghostdog74,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-10 10:17:09

Jeśli masz BSD (OSX) date możesz to zrobić tak:

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

Lub jeśli chcesz wykonać obliczenia daty na dowolną datę:

date -j -v-1d -f "%Y-%m-%d" "2011-09-01" "+%Y-%m-%d"
2011-08-31
 41
Author: Jacob Persson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-15 14:34:36
date --date='-1 day'
 36
Author: silent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-10 10:17:18

Cóż, to jest późna odpowiedź, ale to chyba działa!!

     YESTERDAY=`TZ=GMT+24 date +%d-%m-%Y`;
     echo $YESTERDAY;
 7
Author: alpana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-04 09:02:34

Advanced Bash-scripting Guide

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

Szczegółowe informacje na temat formatu daty można znaleźć na stronie podręcznika dla date

date --date='-1 day'
 4
Author: Peter Lindqvist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-10 10:19:58

MAC OSX

Dla wczorajszej daty:

date -v-1d +%F

Gdzie 1D definiuje dzień bieżący minus 1 dzień. Podobnie,

Date-v-1W + % F - for previous week date

Date-v-1m + % f - for previous month date

JEŚLI MASZ DATĘ GNU,

date --date="1 day ago"

Więcej informacji: https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html

 4
Author: Maverick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-18 19:10:02

Używać Perla zamiast być może?

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

Or, use nawk and (ab) use / usr / bin/adb:

nawk 'BEGIN{printf "0t%d=Y\n", srand()-86400}' | adb

Natknąłem sięto też ... szaleństwo!

/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= '/^time\(\)/ {gsub(/ /,"",$2);printf "0t%d=Y\n", $2-86400}' | adb
 3
Author: martin clayton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-10 22:24:21

Przepraszam, że nie wspominam o i w systemie Solaris. W związku z tym przełącznik-date nie jest dostępny w Solaris bash.

Dowiaduję się, że mogę dostać poprzedni termin z little trick w strefie czasowej.

DATE=`TZ=MYT+16 date +%Y-%m-%d_%r`
echo $DATE
 3
Author: conandor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-11 02:16:44
yesterday=`date -d "-1 day" %F`

Umieszcza datę wczorajszą w formacie RRRR-MM-DD w zmiennej $yesterday.

 1
Author: Heinzi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-10 10:19:07
#!/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
Author: medoix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-10 10:27:09

date --date='-1 day'

 1
Author: DigitalRoss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-18 00:55:52

Wypróbuj poniższy kod, który zajmuje się również częścią 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 Ansgar Wiechers

 0
Author: misguided,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:47

DST aware solution:

Manipulowanie strefą czasową jest możliwe do zmiany zegara kilka godzin. Ze względu na czas letni, 24 godziny temu może być dzisiaj lub przedwczoraj.

Jesteś pewien, że wczoraj było 20-30 godzin temu. Który? Najnowszy, który nie jest dzisiaj.
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

Parametr-e użyty w poleceniu echo jest potrzebny w bash, ale nie będzie działał z ksh. W ksh możesz użyć tego samego polecenia bez flagi-E.

Gdy twój skrypt będzie używany w różnych środowiskach, możesz uruchomić skrypt z #!/ bin / ksh lub #!/ bin / bash. Można też zastąpić \n znakiem nowej linii:

echo "$(TZ=GMT+30 date +%Y-%m-%d)
$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1
 0
Author: Walter A,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-12 12:50:58

Niezbyt seksowne, ale może się udać:

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)'

Sformowana z odpowiedzi "martin clayton".

 0
Author: trox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-19 15:12:39
date +%Y:%m:%d|awk -vFS=":" -vOFS=":" '{$3=$3-1;print}'
2009:11:9
 -1
Author: Vijay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-10 10:50:05