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.