De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

Recursos Avançados do Comando date

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 18 de julho de 2026

Na primeira parte deste artigo vimos como somar e subtrair dias utilizando o parâmetro -d. Entretanto, o analisador de datas do GNU date é muito mais poderoso. Ele consegue interpretar expressões em linguagem natural, converter timestamps Unix e formatar datas de praticamente qualquer maneira.

Datas relativas em linguagem natural

Além de expressões como +15 days, o comando aceita diversas palavras-chave.

A data de amanhã:

$ date -d "tomorrow"

Ontem:

$ date -d "yesterday"

Uma semana atrás:

$ date -d "last week"

Na próxima semana:

$ date -d "next week"

No próximo mês:

$ date -d "next month"

No próximo ano:

$ date -d "next year"

Essas expressões também podem ser combinadas com um formato de saída:

$ date -d "tomorrow" +"%Y-%m-%d"

Dias da semana

O date também entende nomes de dias da semana.

Próxima segunda-feira:

$ date -d "next Monday"

Última sexta-feira:

$ date -d "last Friday"

A próxima terça-feira às 14 horas:

$ date -d "next Tuesday 14:00"

Esse recurso é bastante útil em scripts que geram relatórios ou agendam tarefas.

Horários relativos

Também é possível fazer cálculos envolvendo horas e minutos.

Daqui a duas horas:

$ date -d "+2 hours"

Daqui a noventa minutos:

$ date -d "+90 minutes"

Daqui a trinta segundos:

$ date -d "+30 seconds"

Ou combinar tudo:

$ date -d "+2 days +3 hours +45 minutes"

Primeiro e último dia do mês

Um truque bastante útil consiste em calcular automaticamente o primeiro ou o último dia de um mês.

Primeiro dia do mês atual:

$ date -d "$(date +%Y-%m-01)"

Último dia do mês atual:

$ date -d "$(date +%Y-%m-01) +1 month -1 day"

Último dia do próximo mês:

$ date -d "$(date +%Y-%m-01) +2 months -1 day"

Esse tipo de cálculo aparece frequentemente em rotinas financeiras e administrativas.

Convertendo datas para timestamp Unix

Internamente, o Linux representa datas como a quantidade de segundos transcorridos desde 1º de janeiro de 1970 às 00:00:00 UTC.

Esse valor é conhecido como Unix Timestamp ou Epoch Time.

Para obter o timestamp atual:

$ date +%s

Também é possível converter uma data específica:

$ date -d "2026-07-04 10:30:00" +%s

Convertendo timestamp para data

O processo inverso é igualmente simples.

$ date -d @1783179625

Ou formatando a saída:

$ date -d @1783179625 +"%Y-%m-%d %H:%M:%S"

Esse recurso é muito utilizado na análise de logs e bancos de dados.

Descobrindo o dia da semana

$ date +"%A"

Ou em formato abreviado:

$ date +"%a"

O número do dia da semana também pode ser obtido:

$ date +"%u"

Onde:

  • 1 = Segunda-feira
  • 2 = Terça-feira
  • ...
  • 7 = Domingo

Número do dia no ano

$ date +"%j"
185

Isso indica que hoje é o 185º dia do ano.

Número da semana

Semana do ano segundo a norma ISO:

$ date +"%V"
27

Datas em UTC

Por padrão, o date utiliza o fuso horário local.

Para trabalhar em UTC:

$ date -u

Ou:

$ date -u +"%Y-%m-%d %H:%M:%S UTC"

Isso é particularmente útil em servidores e aplicações distribuídas.

Trabalhando com fusos horários

Também é possível consultar a data e a hora em outro fuso.

Por exemplo, Nova York:

$ TZ=America/New_York date

Londres:

$ TZ=Europe/London date

Tóquio:

$ TZ=Asia/Tokyo date

Não é necessário alterar o relógio do sistema.

Algumas expressões curiosas

O interpretador de datas do GNU date aceita várias expressões interessantes.

Meio-dia:

$ date -d "noon"

Meia-noite:

$ date -d "midnight"

Hoje às 18 horas:

$ date -d "today 18:00"

Amanhã às 8h30:

$ date -d "tomorrow 08:30"

Daqui a três meses e cinco dias:

$ date -d "+3 months +5 days"

Alguns formatos úteis

Data ISO:

$ date +"%F"

Data e hora:

$ date +"%F %T"

Formato brasileiro:

$ date +"%d/%m/%Y"

Nome do mês:

$ date +"%B"

Nome abreviado do mês:

$ date +"%b"

Ano com dois dígitos:

$ date +"%y"

Conclusão

O comando date é uma das ferramentas mais versáteis do GNU Coreutils. Além de exibir a data atual, ele é capaz de interpretar expressões em linguagem natural, realizar cálculos complexos envolvendo dias, semanas, meses e anos, converter timestamps Unix, trabalhar com diferentes fusos horários e produzir saídas em praticamente qualquer formato desejado.

Para quem escreve scripts Shell, conhecer essas funcionalidades permite eliminar uma grande quantidade de código dedicado ao tratamento de datas, tornando os programas mais simples, legíveis e confiáveis.

Uma curiosidade interessante é que toda essa flexibilidade vem do analisador de datas (getdate) utilizado pelo GNU Coreutils. Ele aceita dezenas de construções diferentes, muitas delas pouco conhecidas, como date -d "third Tuesday next month" ou date -d "2 years ago". Vale a pena consultar a documentação (info date ou info '(coreutils) Date input formats'), que dedica um capítulo inteiro apenas às formas de interpretar datas.



Veja a relação completa dos artigos de Rubens Queiroz de Almeida