Inicialmente este blog foi criado para armazenar algumas dicas e links de UNIX/Linux, OpenVMS, linguagem C, Assembly, TCP/IP e nerdezas afins. No entanto devido ao autor ter abandonado o seu plano de ser um super hacker e dominar o mundo (devido esposa, família, filhos, trabalho), a partir de 2012 este blog tem um tipo de nerdeza mais light (Android, Linux, RetroPie (retrogames), produtividade, e por aí vai). Estas dicas raramente serão criações minhas.

sexta-feira, 6 de maio de 2016

Aritmética de datas em shell scripts

Estava eu felizinho e tranquilo fazendo um scriptzinho aqui para me ajudar em algumas coisas do trabalho, quando esbarrei no problema da aritmética de datas.

O caso é o seguinte: tenho um arquivo (planilha excel) onde todos os dias preencho várias informações, e às 17h eu tenho que fechar este arquivo e abrir um novo que se encerrará às 17h do dia seguinte. O meu objetivo era fazer um script onde eu pudesse passar uma data na linha de comando e ele já abrisse diretamente o arquivo referente a esta data. Útil para consultar os arquivos de dias anteriores.

O problema que encontrei foi que o nome dos arquivos contem a data de fechamento daquele arquivo e a data anterior, exemplo: "Dados 01-05-2016 a 02-05-2016.xls". Isso é um problema pois não é uma matemática tão simples fazer o script saber qual é o dia anterior de uma determinada data. Alguns meses tem 28, 29, 30 ou 31 dias...

Numa rápida googlada achei uma solução simples, bonita e elegante:

date -d "2016-05-01 - 1 day"

Para obter a data no formato desejado basta usar o caractere de formatação '%', de acordo com o que é mostrado na manpage. No meu caso fica assim:

date -d "2016-05-01 - 1 day" +%d-%m-%Y

(OBS.: pelo que andei lendo esse recurso de aritmética de datas é uma feature do GNU date. Portanto funcionará em qualquer distro Linux moderna, porém não funciona no date do BSD, que é o utilizado nos SOs da Apple.)

Um comentário:

Rajat Mishra disse...

Nice post! Really liked it, you gonna check this one
october2017moonphasescalendar
digital marketing company
Thanks

tags