linux + aggiungi X giorni ad oggi e ottieni una nuova data virtuale


115

Ho una macchina Linux (RH 5.3)

Devo aggiungere / calcolare 10 giorni più la data, quindi riceverò una nuova data (data di scadenza))

per esempio

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

Quindi ho bisogno di ottenere

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

Si prega di consigliare come calcolare la nuova data di scadenza (con comando bash, ksh o manipola data?)

Risposte:


158

Puoi semplicemente utilizzare l' -dinterruttore e fornire una data da calcolare

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’

Questo è uno strumento abbastanza potente in quanto puoi fare cose come

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

o

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

o

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

Quindi se $ end_date = 20131001, allora $ prog_end_date = 20131011


2
Grazie!! I tuoi esempi dovrebbero essere nella datepagina delle informazioni GNU !
— Assapora Cubranic il

Non avrei mai saputo di poterlo fare, questa è davvero una bella soluzione.
— Tim Seed

1
+1: fantastico. Risposta utile.
— Copper.hat il

1
Su OS X quando si utilizza la data di creazione riceverai un errore. Utilizzare brew install coreutilsper installare la funzione della data di GNU, gdate.
— Cugina Cocaina,

2
non funziona: $ docker run -it bash bash bash-5.0# date -d "+10 days" date: invalid date '+10 days' bash-5.0#
— Christian Bongiorno,

37

Puoi utilizzare "+ x giorni" come stringa di formato:

$ date -d "+10 days"

20
$ date -v -1d

Per ottenere una data di ritorno di 1 giorno utilizzando il comando date:

$ date -v -1d

Darà (data corrente -1) significa 1 giorno prima.

$ date -v +1d

Questo darà (data corrente +1) significa 1 giorno dopo.

Allo stesso modo sotto il codice scritto può essere usato al posto di "d" per scoprire anno, mese ecc.

y-Year
m-Month 
w-Week 
d-Day 
H-Hour 
M-Minute  
S-Second

8
Questo funziona per me sul mio Mac, ma non sui nostri server Gentoo.
— Mike Dotterer,

Molto meglio della risposta accettata, questo consente anche formati di data arbitrari in una sola riga.
— pferrel

9
questo non funziona su Ubuntu 15.10 o RedHat 6.6. Presumo che non funzioni neanche su RH5.3. Motivo: '-v' e '-1d' non sono opzioni valide per 'date'
— syss

2
Questa sembra essere una sintassi Unix / BSD per la datequale GNU date( gdatesu molti BSD) non supporta. GNU dateusa la sintassi nella risposta accettata. Ricorda sempre: GNU non è Unix!
— Bacon Bits,

1
@BaconBits - ma se sei rms puoi affermarlo perché un sacco di codice util GNU è stato portato su Linux e quindi "Linux is GNU". Tranne, ovviamente, per il fatto che GNU Hurd (Once-And-Future-OS di FSF) è appena una cosa. Suppongo che ciò che fa incazzare sia che mentre trascorreva il suo tempo a pontificare, Linus trascorreva il suo tempo a scrivere codice - il che risulta essere una prova positiva che è molto più probabile creare software funzionante se si scrive codice che se si pontifica. :-)
— Bob Jarvis,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.