linux + adicione X dias até a data e obtenha uma nova data virtual


115

Eu tenho uma máquina Linux (RH 5.3)

Preciso adicionar / calcular 10 dias mais a data para obter uma nova data (data de validade))

por exemplo

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

Então eu preciso pegar

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

Aconselhe como calcular a nova data de validade (com comando bash, ksh ou manipular data?)

Respostas:


158

Você pode simplesmente usar a -dopção e fornecer uma data a ser calculada

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

Esta é uma ferramenta bastante poderosa, pois você pode fazer coisas como

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

ou

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

ou

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

Portanto, se $ end_date = 20131001, $ prog_end_date = 20131011


2
Obrigado!! Seus exemplos devem estar na datepágina de informações do GNU !
Davor Cubranic

Nunca soube que eu poderia fazer isso - essa é uma solução muito boa.
Tim Semente

11
+1: impressionante. Resposta útil.
copper.hat

11
No OS X, ao usar a data de construção, você receberá um erro. Use brew install coreutilspara instalar a função de data do GNU gdate,.
CousinCocaine

2
não funciona: $ docker run -it bash bash bash-5.0# date -d "+10 days" date: invalid date '+10 days' bash-5.0#
Christian Bongiorno

37

Você pode usar "+ x dias" como sequência de formato:

$ date -d "+10 days"

20
$ date -v -1d

Para obter a data de retorno de 1 dia usando o comando date:

$ date -v -1d

Dará (data atual -1) significa 1 dia antes.

$ date -v +1d

Isso dará (data atual +1) significa 1 dia depois.

Da mesma forma, o código escrito abaixo pode ser usado no lugar de "d" para descobrir ano, mês etc.

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

8
Isso funciona para mim no meu mac, mas não nos nossos servidores Gentoo.
Mike Dotterer

Muito melhor que a resposta aceita, isso também permite formatos de data arbitrários em uma única linha.
Pferrel

9
isso não funciona no Ubuntu 15.10 ou RedHat 6.6. Eu suponho que também não funciona no RH5.3. Motivo: '-v' e '-1d' não são opções válidas para 'date'
syss 2/16/16

2
Parece ser uma sintaxe Unix / BSD date, para a qual o GNU date( gdateem muitos BSDs) não suporta. GNU's dateusa a sintaxe na resposta aceita. Lembre-se sempre: o GNU não é Unix!
Bacon Bits

11
@BaconBits - mas se você é rms, pode reivindicar isso porque muitos códigos util GNU foram portados para o Linux que, portanto, "Linux é GNU". Exceto, é claro, pelo fato de o GNU Hurd (sistema operacional Once-And-Future-OS da FSF) ser apenas uma coisa. Suponho que o que mais irrita é que, enquanto ele passava o tempo pontificando, Linus passava o tempo escrevendo código - o que prova ser positivo de que você tem muito mais probabilidade de criar software de trabalho se escrever código do que pontificar. :-)
Bob Jarvis
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.