linux + dodaj X dni do daty i uzyskaj nową wirtualną datę


115

Mam maszynę z systemem Linux (RH 5.3)

Muszę dodać / obliczyć 10 dni plus datę, aby uzyskać nową datę (datę ważności))

na przykład

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

Więc muszę to zdobyć

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

Proszę doradzić, jak obliczyć nową datę ważności (za pomocą polecenia bash, ksh lub manipulowania datą?)

Odpowiedzi:


158

Możesz po prostu użyć -dprzełącznika i podać datę do obliczenia

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

Jest to dość potężne narzędzie, ponieważ możesz robić takie rzeczy

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

lub

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

lub

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

Więc jeśli $ end_date = 20131001, to $ prog_end_date = 20131011


2
Dziękuję Ci!! Twoje przykłady powinny znajdować się na datestronie informacyjnej GNU !
Davor Cubranic

Nigdy nie wiedziałem, że mogę to zrobić - to naprawdę miłe rozwiązanie.
Tim Seed

1
+1: Świetnie. Przydatna odpowiedź.
copper.hat

1
W systemie OS X podczas korzystania z daty wbudowania otrzymasz błąd. Użyj brew install coreutilszainstalować funkcję date GNU, gdate.
CousinCocaine

2
nie działa: $ docker run -it bash bash bash-5.0# date -d "+10 days" date: invalid date '+10 days' bash-5.0#
Christian Bongiorno

37

Możesz użyć „+ x dni” jako ciągu formatu:

$ date -d "+10 days"

20
$ date -v -1d

Aby uzyskać datę wstecz z 1 dnia za pomocą polecenia date:

$ date -v -1d

Da (bieżąca data -1) oznacza 1 dzień wcześniej.

$ date -v +1d

To da (bieżąca data +1) oznacza 1 dzień później.

Podobnie poniżej „d” można użyć kodu napisanego w celu znalezienia roku, miesiąca itp.

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

8
Działa to na moim komputerze Mac, ale nie na naszych serwerach Gentoo.
Mike Dotterer

Znacznie lepsza niż zaakceptowana odpowiedź, pozwala na dowolne formaty dat również w jednym wierszu.
pferrel

9
to nie działa na Ubuntu 15.10 lub RedHat 6.6. Zakładam, że nie działa również na RH5.3. Powód: „-v” i „-1d” nie są prawidłowymi przełącznikami dla „data”
syss

2
Wydaje się, że jest to składnia Unix / BSD, dla datektórej GNU date( gdatena wielu BSD) nie obsługuje. GNU dateużywa składni w zaakceptowanej odpowiedzi. Zawsze pamiętaj: GNU nie jest Uniksem!
Bacon Bits

1
@BaconBits - ale jeśli jesteś RMS, możesz twierdzić, że ponieważ wiele plików GNU jest przeniesionych do Linuksa, dlatego „Linux jest GNU”. Z wyjątkiem, oczywiście, faktu, że GNU Hurd (system operacyjny FSF „Raz i przyszłość”) jest ledwo czymś. Przypuszczam, że to, co wkurza, to fakt, że podczas gdy spędzał czas na pacyfikacji, Linus spędzał czas na pisaniu kodu - co okazuje się dowodem na to, że znacznie bardziej prawdopodobne jest, że stworzysz działające oprogramowanie, jeśli napiszesz kod, niż jeśli pontyfikat. :-)
Bob Jarvis,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.