it-swarm.com.de

Holen Sie sich das Datum (einen Tag vor der aktuellen Zeit) in Bash

Wie kann ich das Datum drucken, das einen Tag vor der aktuellen Zeit in Bash liegt?

156
conandor

Leider erwähne ich nicht auf Solaris-System. Daher ist der Schalter -date in Solaris bash nicht verfügbar.

Ich finde heraus, dass ich das vorherige Datum mit einem kleinen Trick auf die Zeitzone bekommen kann.

DATE=`TZ=MYT+16 date +%Y-%m-%d_%r`
echo $DATE
4
conandor

wenn du GNU Datum hast und ich dich richtig verstanden habe

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

oder

$ date +%Y:%m:%d -d "1 day ago"
2009:11:09
249
ghostdog74

Wenn Sie BSD (OSX) date haben, können Sie dies folgendermaßen tun:

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

Oder wenn Sie Datumsberechnungen an einem beliebigen Datum durchführen möchten:

date -j -v-1d -f "%Y-%m-%d" "2011-09-01" "+%Y-%m-%d"
2011-08-31
47
Jacob Persson
date --date='-1 day'
40
silent

MAC OSX

Für das gestrige Datum:

date -v-1d +%F

wobei 1d den aktuellen Tag minus 1 Tag definiert. Ähnlich,

Datum -v-1w +% F - für das Datum der vorherigen Woche

Datum -v-1m +% F - für das Datum des Vormonats

WENN SIE GNU DATE,

date --date="1 day ago"

Weitere Informationen: https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html

12
Maverick

Nun, das ist eine späte Antwort, aber das scheint zu funktionieren !!

     YESTERDAY=`TZ=GMT+24 date +%d-%m-%Y`;
     echo $YESTERDAY;
7
alpana

Advanced Bash-Scripting Guide

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

Einzelheiten zum Datumsformat finden Sie in der Manpage für Datum

date --date='-1 day'
5
Peter Lindqvist

Verwenden Sie stattdessen vielleicht Perl?

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

Oder benutze nawk und (ab) benutze/usr/bin/adb:

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

Kam über dies zu ... verrückt!

/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= '/^time\(\)/ {gsub(/ /,"",$2);printf "0t%d=Y\n", $2-86400}' | adb
3
martin clayton

Sie können eine einfache Berechnung durchführen, die mit einem regulären Ausdruck aufgepeppt wird, wenn das ausgewählte Datumsformat "JJJJMM" lautet:

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

Im Januar 2020 wird es 201912 zurückgeben ;-) Aber es ist nur ein Workaround, wenn für das Datum keine Berechnungsoptionen verfügbar sind und andere Datumsinterpreteroptionen (z. B. mit Perl) nicht verfügbar sind ;-)

1
Sven
#!/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
medoix
yesterday=`date -d "-1 day" %F`

Setzt das gestrige Datum im Format JJJJ-MM-TT in die Variable $yesterday.

1
Heinzi
date --date='-1 day'
</ code>
1
DigitalRoss

Probieren Sie den folgenden Code aus, der sich auch um den DST-Teil kümmert.

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
misguided

DST-fähige Lösung:

Das Ändern der Zeitzone ist möglich, um die Uhrzeit einige Stunden zu ändern. Aufgrund der Sommerzeit können 24 Stunden vor heute oder vorgestern liegen.

Sie sind sicher, dass gestern 20 oder 30 Stunden her ist. Welcher? Nun, die jüngste, die es heute nicht mehr gibt.

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

Der im Befehl echo verwendete Parameter -e wird mit bash benötigt, funktioniert jedoch nicht mit ksh. In ksh können Sie denselben Befehl ohne das Flag -e verwenden.

Wenn Ihr Skript in verschiedenen Umgebungen verwendet wird, können Sie das Skript mit #!/Bin/ksh oder #!/Bin/bash starten. Sie können\n auch durch eine neue Zeile ersetzen:

echo "$(TZ=GMT+30 date +%Y-%m-%d)
$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1
0
Walter A