Linux + Addiere X Tage zum Datum und erhalte ein neues virtuelles Datum

115

Ich habe eine Linux (RH 5.3) Maschine

Ich muss 10 Tage plus Datum hinzufügen / berechnen, damit ich ein neues Datum erhalte (Ablaufdatum).

zum Beispiel

 # date 
 Sun Sep 11 07:59:16 IST 2012

Also muss ich bekommen

     NEW_expration_DATE = Sun Sep 21 07:59:16 IST 2012

Bitte geben Sie an, wie das neue Ablaufdatum berechnet werden soll (mit dem Befehl bash, ksh oder manipulate date?)

Lenin Raj Rajasekaran
quelle

Antworten:

158

Sie können einfach den -dSchalter verwenden und ein Datum angeben, das berechnet werden soll

date
Sun Sep 23 08:19:56 BST 2012
NEW_expration_DATE=$(date -d "+10 days")
echo $NEW_expration_DATE
Wed Oct 3 08:12:33 BST 2012 
  -d, --date=STRING
          display time described by STRING, not now

Dies ist ein ziemlich mächtiges Werkzeug, wie Sie Dinge tun können

date -d "Sun Sep 11 07:59:16 IST 2012+10 days"
Fri Sep 21 03:29:16 BST 2012

oder

TZ=IST date -d "Sun Sep 11 07:59:16 IST 2012+10 days"
Fri Sep 21 07:59:16 IST 2012

oder

prog_end_date=`date '+%C%y%m%d' -d "$end_date+10 days"`

Wenn also $ end_date = 20131001, dann $ prog_end_date = 20131011


quelle
2
Danke!! Ihre Beispiele sollten sich auf der GNU- dateInfoseite befinden!
Davor Cubranic
Ich hätte nie gedacht, dass ich das schaffen könnte - das ist eine wirklich schöne Lösung.
Tim Seed
1
+1: Genial. Nützliche Antwort.
copper.hat
1
Unter OS X wird bei Verwendung des eingebauten Datums ein Fehler angezeigt. Verwenden Sie brew install coreutilsGNU Datumsfunktion zu installieren, gdate.
CousinCocaine
2
funktioniert nicht: $ docker run -it bash bash bash-5.0# date -d "+10 days" date: invalid date '+10 days' bash-5.0#
Christian Bongiorno
37

Sie können "+ x Tage" als Formatzeichenfolge verwenden:

$ date -d "+10 days"
Quanten
quelle
20
$ date -v -1d

Um ein Datum von 1 Tag zurück zu erhalten, verwenden Sie den Befehl date:

$ date -v -1d

Es gibt (aktuelles Datum -1) also 1 Tag vorher.

$ date -v +1d

Dies bedeutet 1 Tag danach (aktuelles Datum +1).

In ähnlicher Weise kann unten stehender Code anstelle von "d" verwendet werden, um das Jahr, den Monat usw. herauszufinden.

y-Year
m-Month 
w-Week 
d-Day 
H-Hour 
M-Minute  
S-Second
Abhilash Kumar
quelle
8
Dies funktioniert für mich auf meinem Mac, aber nicht auf unseren Gentoo-Servern.
Mike Dotterer
Dies ist viel besser als die akzeptierte Antwort und ermöglicht auch beliebige Datumsformate in einer einzelnen Zeile.
pferrel
9
Dies funktioniert nicht unter Ubuntu 15.10 oder RedHat 6.6. Ich gehe davon aus, dass es auf RH5.3 auch nicht funktioniert. Grund: '-v' und '-1d' sind keine gültigen Schalter für 'date'
syss
2
Dies scheint eine Unix / BSD-Syntax zu sein date, die GNUs date( gdateauf vielen BSDs) nicht unterstützen. GNU's dateverwendet die Syntax in der akzeptierten Antwort. Denken Sie immer daran: GNU ist kein Unix!
Bacon Bits
1
@BaconBits - aber wenn Sie Effektivwert sind, können Sie behaupten, dass "Linux is GNU" , weil eine Menge GNU-Util-Code auf Linux portiert wurde . Abgesehen von der Tatsache, dass GNU Hurd (FSFs Once-And-Future-OS) nur eine Kleinigkeit ist. Ich nehme an, was nervt, ist, dass Linus seine Zeit damit verbracht hat, Code zu schreiben, während er seine Zeit damit verbracht hat, zu ponzifizieren. :-)
Bob Jarvis