Comando date - Formatacao e Calculo de Datas
O Que e o Comando date?
date serve. Execute-o e ele imprime a hora atual, e date +%Y%m%d formata como 20260605. Voce pode usar isso diretamente em um nome de arquivo.O comando date exibe a data e hora atuais, e formata como voce quiser. Timestamps em logs, nomes de arquivos de backup, calculos de data dentro de scripts — e um comando que voce vai usar quase todo dia.
Em uma linha
date +FORMAT constroi uma string de data no formato que voce quiser.
Exemplo: date +%Y-%m-%d → 2026-06-05
O Que Voce Vai Aprender
- Mostrar a hora atual com
date, e formatar comdate +%Fe similares - Combinar especificadores de formato como
%Y%m%dem qualquer layout - Calcular datas como ontem, N dias depois, proxima semana com
date -d - Obter segundos epoch (Unix time) com
date +%se converter de volta comdate -d @seconds - Trocar fusos horarios com
TZ='UTC' dateoudate -u - Ficar atento as diferencas de sintaxe entre Linux (GNU date) e macOS (BSD date)
1. Mostrar a Hora Atual
Conclusao: Execute date sem argumentos para a hora atual; use date +FORMAT para mudar a aparencia.
Sem argumentos, date imprime a data e hora atuais.
$ date Fri Jun 5 15:52:59 JST 2026
O texto exato (o dia da semana e a parte JST) depende das configuracoes de locale e fuso horario do seu sistema.
Quando voce quer apenas a data, ou apenas a hora, use os especificadores de formato na proxima secao.
2. Formatar a Saida (%Y %m %d...)
Conclusao: Coloque especificadores como %Y (ano), %m (mes), %d (dia) apos date + para moldar a saida.
Escreva especificadores de formato apos o + e voce obtem exatamente aquele formato.
$ date +%Y-%m-%d 2026-06-05
$ date "+%Y/%m/%d %H:%M:%S" 2026/06/05 15:52:59
Se seu formato contiver um espaco, envolva tudo com "..." (aspas duplas). Sem aspas, o shell divide no espaco e voce recebe um erro ou saida inesperada.
2-1. Especificadores de Formato Comuns
| Especificador | Significado | Exemplo |
|---|---|---|
%Y |
Ano com 4 digitos | 2026 |
%m |
Mes (01-12) | 06 |
%d |
Dia (01-31) | 05 |
%H |
Hora (00-23) | 15 |
%M |
Minuto (00-59) | 52 |
%S |
Segundo (00-60) | 59 |
%A |
Dia da semana (completo) | Friday |
%a |
Dia da semana (curto) | Fri |
%j |
Dia do ano | 156 |
%s |
Segundos epoch | 1780642379 |
2-2. Atalhos Uteis
$ date +%F 2026-06-05
$ date +%T 15:52:59
%Fequivale a%Y-%m-%d(a data ISO 8601)%Tequivale a%H:%M:%S(a hora)
Na duvida, lembre de %F (data) e %T (hora) — eles cobrem a maioria das situacoes.
3. Templates para Nomes de Arquivo e Logs
Conclusao: Incorpore $(date +%Y%m%d) em um nome de arquivo para criar arquivos datados automaticamente.
$(...) insere a saida de um comando em uma string (substituicao de comando). E o truque classico para backups.
$ cp data.db "backup-$(date +%Y%m%d).db"
Isso cria um arquivo chamado backup-20260605.db.
$ echo "[$(date '+%Y-%m-%d %H:%M:%S')] Processo iniciado" >> app.log
Use isso quando quiser adicionar seu proprio timestamp a um log. Exemplo de saida:
[2026-06-05 15:52:59] Processo iniciado
Evite colocar %T diretamente em nomes de arquivo, pois contem : (dois-pontos). Alguns ambientes e sistemas de arquivos lidam mal com isso. Para timestamp em um nome, %H%M%S (sem separadores) e mais seguro.
4. Calcular Datas (ontem, 3 dias depois, N dias atras)
Conclusao: Use date -d "string" para calcular datas como yesterday, 3 days ago ou next friday em ingles simples.
Passe a data que voce quer para a opcao -d (ou --date), escrita em ingles simples.
$ date -d "yesterday" +%F 2026-06-04
$ date -d "3 days ago" +%F 2026-06-02
$ date -d "next friday" +%F 2026-06-12
Voce tambem pode calcular a partir de uma data base.
$ date -d "2025-01-01 +30 days" +%F 2025-01-31
date faz isso corretamente para voce. Ele lida com finais de mes e anos bissextos tambem, entao e muito mais seguro do que contar de cabeca.Expressoes comuns
tomorrow/yesterday3 days ago/2 weeks/1 monthnext monday/last sunday
Este calculo de data relativa e um recurso do GNU date (Linux). O macOS usa uma sintaxe diferente e esses comandos nao funcionarao la. Veja a Secao 7 para detalhes.
5. Segundos Epoch (Unix Time)
Conclusao: date +%s imprime segundos desde 1970, e date -d @seconds converte de volta para uma data.
Segundos epoch (Unix time) e o numero de segundos desde 1970-01-01 00:00:00 UTC. E um formato comum para armazenar tempo em programas e logs.
$ date +%s 1780642379
Para converter segundos epoch de volta para uma data legivel, prefixe o numero com @.
$ date -u -d @1700000000 "+%Y-%m-%d %H:%M:%S %Z" 2023-11-14 22:13:20 UTC
Quando um log registra apenas um numero como 1700000000 e voce nao consegue ler, date -d @esse-numero converte para uma data instantaneamente.
6. Trocar Fusos Horarios (TZ / -u)
Conclusao: date -u mostra UTC, e TZ='Area/Cidade' date mostra a hora em qualquer fuso horario.
Adicione -u para exibir a hora em UTC (Tempo Universal Coordenado).
$ date -u "+%Y-%m-%d %H:%M %Z" 2026-06-05 06:52 UTC
Para ver a hora em uma regiao especifica, defina a variavel de ambiente TZ logo antes do comando.
$ TZ='America/New_York' date "+%Y-%m-%d %H:%M %Z" 2026-06-05 02:52 EDT
$ TZ='Asia/Tokyo' date "+%Y-%m-%d %H:%M %Z" 2026-06-05 15:52 JST
TZ=... antes do comando muda o fuso horario apenas para aquela execucao?TZ='Area/Cidade' date so se aplica enquanto aquele date executa. Sua configuracao do sistema permanece intocada, entao e seguro experimentar.Voce pode listar os nomes de fuso validos (como Asia/Tokyo, America/New_York, Europe/London) com timedatectl list-timezones. Como TZ e uma variavel de ambiente, ler Trabalhando com Variaveis de Ambiente vai aprofundar seu entendimento.
7. Atencao a Diferenca com macOS (BSD date)
Conclusao: Linux vem com GNU date; macOS vem com BSD date, cujo calculo de data e sintaxe de epoch diferem.
Os comandos neste artigo assumem Linux como Ubuntu (GNU coreutils date). O date que vem com macOS e a versao BSD, e algumas opcoes diferem.
| O que voce quer | Linux (GNU) | macOS (BSD) |
|---|---|---|
| 3 dias atras | date -d "3 days ago" |
date -v-3d |
| Epoch para data | date -d @1700000000 |
date -r 1700000000 |
| Interpretar string data | date -d "2025-01-01" |
date -j -f "%Y-%m-%d" "2025-01-01" |
Se um comando date -d ... que voce encontrou online reclama com algo como illegal option no macOS, voce provavelmente esta na versao BSD. Execute date --version; se imprimir GNU coreutils, voce esta na versao GNU.
Mini desafio: mostrar a data 3 dias a partir de agora no formato AAAA/MM/DD
Dica: calcule a data com -d, depois formate com +FORMAT.
Resposta:
$ date -d "3 days" "+%Y/%m/%d" 2026/06/08
"3 days" significa "3 dias a partir de agora." Escrever "+3 days" faz a mesma coisa.
Resumo
| Tarefa | Comando |
|---|---|
| Mostrar a hora atual | date |
| Mostrar apenas a data | date +%F (= date +%Y-%m-%d) |
| Mostrar apenas a hora | date +%T |
| Data para nome de arquivo | date +%Y%m%d |
| Calcular uma data | date -d "3 days ago" +%F |
| Obter segundos epoch | date +%s |
| Converter epoch para data | date -d @1700000000 |
| Mostrar UTC | date -u |
| Usar um fuso horario especifico | TZ='Asia/Tokyo' date |
Tres coisas para tentar agora
- Execute
date +%Fpara mostrar a data de hoje - Execute
date -d "tomorrow" +%Fpara calcular amanha - Execute
cp algo.txt "backup-$(date +%Y%m%d).txt"para criar um arquivo datado