Ich fand, dass die meisten als vorgeschlagene Antwort sind, aber -d Schalter ist nicht in Solaris 'Datum gefunden
conandor
3
Für die Verwendung unter Ubuntu mit Datumsfunktion: $ (Datum +% Y:% m:% d -d "vor 1 Tag") lautet die Ausgabe: 2013: 04: 21. Und wenn Sie das Datum 10 Tage vorher möchten, können Sie $ (Datum +% Y:% m:% d - d "vor 10 Tagen") oder $ (Datum +% Y:% m:% d - d "10 verwenden vor einem Tag ")
Diese Bash-Funktion funktioniert sowohl unter Linux als auch unter OSX. Grundsätzlich wird zuerst der GNU Linux-Stil ausprobiert. Wenn dies fehlschlägt, versucht es den OSX-Stil. Nennen Sie es mit einem Argument für die Anzahl der Tage in der Vergangenheit, an denen Sie das Datum haben möchten. Wenn Sie kein Argument übergeben, wird von 0 Tagen ausgegangen. Dieser Code ist ein Einzeiler, daher sollte Ausschneiden und Einfügen funktionieren - es werden keine Zeilenenden angenommen. 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 }
Noah Spurrier
50
Wenn Sie BSD (OSX) haben date, können Sie dies folgendermaßen tun:
date -j -v-1dWedDec1415: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
Sie müssen die dateüber das coreutilsPaket verfügbare GNU-Version von installieren , damit diese Syntax unter macOS funktioniert. Wenn Sie Homebrew verwenden, können Sie es über installieren. brew install coreutilsDanach sollten Sie in der Lage sein, das GNU-Datum über den gdateBefehl zu verwenden. Siehe: topbug.net/blog/2013/04/14/…
sumitsu
17
MAC OS X
Für das gestrige Datum:
date -v-1d+%F
Dabei definiert 1d den aktuellen Tag minus 1 Tag. Ähnlich,
Datum -v-1w +% F - für das Datum der vorherigen Woche
#!/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=12fiset`cal $month $year`
xday=${$#}
day=`expr $xday + $day`fi
echo $year-$month-$day
+1 zur Korrektur, interessante Methode, obwohl sie etwas ausführlich ist.
Peter Lindqvist
1
Hallo medoix, ich kann die Bedeutung von $ {$ #} nicht finden. Ich weiß, dass $ # für die Anzahl der Argumente für ein Skript / eine Funktion steht. Aber ich kann mich nicht darauf beziehen. Bitte helfen Sie.
Karthick S
Dies funktioniert nicht für den vorherigen Tag bei Monatswechsel. Zum Beispiel ist heute 1 July , 2013das Ergebnis, das ausgedruckt wird 2013-6-1347, während das erwartete Ergebnis2013-6-30
fehlgeleitet am
Anstelle der 3 Zeilen zwischen dem "fi" versuchen Sie "day = echo $(cal $month $year)|tr ' ' '\n'|tail -n 1"
Anton Roslov
1
Sie können eine einfache Berechnung mit einem regulären Ausdruck durchführen, wenn das gewählte Datumsformat "JJJJMM" lautet:
echo $(($(date +"%Y%m")-1))| sed -e 's/99$/12/'
Im Januar 2020 wird 201912 zurückgegeben ;-) Es ist jedoch nur eine Problemumgehung, wenn für das Datum keine Berechnungsoptionen und andere Dateninterpreteroptionen (z. B. mit Perl) nicht verfügbar sind ;-)
Das führt date: illegal option: -dzu Solaris. Ihre Antwort , die auf nicht-portable GNU Erweiterungen setzt das POSIX-Standard - dateDienstprogramm für eine Frage über die Nicht-GNU Solaris - Plattform.
Andrew Henle
0
Versuchen Sie den folgenden Code, der sich auch um den DST-Teil kümmert.
Das Manipulieren der Zeitzone ist möglich, um die Uhr einige Stunden zu ändern. Aufgrund der Sommerzeit kann 24 Stunden heute oder vorgestern sein.
Sie sind sicher, dass gestern vor 20 oder 30 Stunden war. Welcher? Nun, die jüngste, die es heute nicht 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 für 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 das \ 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
--date
oder-d
ist nur im GNU-Datum verfügbarAntworten:
Wenn du ein GNU-Datum hast und ich dich richtig verstanden habe
oder
quelle
date -v-1d
unter OSX (minus),-v+1d
(plus)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 }
Wenn Sie BSD (OSX) haben
date
, können Sie dies folgendermaßen tun:Oder wenn Sie Datumsberechnungen an einem beliebigen Datum durchführen möchten:
quelle
quelle
date: illegal option -- -
date
über dascoreutils
Paket verfügbare GNU-Version von installieren , damit diese Syntax unter macOS funktioniert. Wenn Sie Homebrew verwenden, können Sie es über installieren.brew install coreutils
Danach sollten Sie in der Lage sein, das GNU-Datum über dengdate
Befehl zu verwenden. Siehe: topbug.net/blog/2013/04/14/…MAC OS X
Für das gestrige Datum:
Dabei definiert 1d den aktuellen Tag minus 1 Tag. Ä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 DATUM HABEN,
Weitere Informationen: https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html
quelle
Nun, das ist eine späte Antwort, aber das scheint zu funktionieren !!
quelle
Erweitertes Bash-Scripting-Handbuch
Einzelheiten zum Datumsformat finden Sie in der Manpage zum Datum
quelle
Es tut mir leid, dass ich das Solaris-System nicht erwähne. Daher ist der Schalter -date in Solaris bash nicht verfügbar.
Ich finde heraus, dass ich das vorherige Datum mit einem kleinen Trick in der Zeitzone erhalten kann.
quelle
bash $(TZ=America/New_York date +%Y-%m-%d)
Verwenden Sie stattdessen vielleicht Perl?
Oder benutze nawk und (ab) benutze / usr / bin / adb:
Ich stieß auf diese zu ... verrückt!
quelle
quelle
Setzt das gestrige Datum im Format JJJJ-MM-TT in eine Variable
$yesterday
.quelle
quelle
1 July , 2013
das Ergebnis, das ausgedruckt wird2013-6-1347
, während das erwartete Ergebnis2013-6-30
echo $(cal $month $year)|tr ' ' '\n'|tail -n 1
"Sie können eine einfache Berechnung mit einem regulären Ausdruck durchführen, wenn das gewählte Datumsformat "JJJJMM" lautet:
Im Januar 2020 wird 201912 zurückgegeben ;-) Es ist jedoch nur eine Problemumgehung, wenn für das Datum keine Berechnungsoptionen und andere Dateninterpreteroptionen (z. B. mit Perl) nicht verfügbar sind ;-)
quelle
oder
quelle
date: illegal option: -d
zu Solaris. Ihre Antwort , die auf nicht-portable GNU Erweiterungen setzt das POSIX-Standard -date
Dienstprogramm für eine Frage über die Nicht-GNU Solaris - Plattform.Versuchen Sie den folgenden Code, der sich auch um den DST-Teil kümmert.
Courtsey Ansgar Wiechers
quelle
DST-fähige Lösung:
Das Manipulieren der Zeitzone ist möglich, um die Uhr einige Stunden zu ändern. Aufgrund der Sommerzeit kann 24 Stunden heute oder vorgestern sein.
Sie sind sicher, dass gestern vor 20 oder 30 Stunden war. Welcher? Nun, die jüngste, die es heute nicht gibt.
Der im Befehl echo verwendete Parameter -e wird für 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 das \ n auch durch eine neue Zeile ersetzen:
quelle
Nicht sehr sexy, könnte aber den Job machen:
Aus "Martin Clayton" Antwort gebildet.
quelle
quelle