Bash:
Comparando duas datas
Como Fazer:
# Comparando datas formatadas como 'YYYY-MM-DD'.
data1="2023-04-01"
data2="2023-04-15"
# Convertendo para segundos desde 1970 (Epoch time)
sec1=$(date -d "$data1" +%s)
sec2=$(date -d "$data2" +%s)
# Comparação simples
if [ "$sec1" -eq "$sec2" ]; then
echo "As datas são iguais."
elif [ "$sec1" -lt "$sec2" ]; then
echo "$data1 é anterior a $data2."
else
echo "$data1 é posterior a $data2."
fi
# Diferença em dias
diferenca=$(( (sec2 - sec1) / 86400 ))
echo "A diferença é de $diferenca dias."
Saída esperada:
2023-04-01 é anterior a 2023-04-15.
A diferença é de 14 dias.
Aprofundamento
Comparar datas é um problema clássico em programação, existindo desde que os primeiros calendários foram incorporados aos sistemas. Inicialmente, isso era feito manualmente, mas com o tempo, ferramentas como o date
no Unix facilitaram a tarefa.
Alternativamente, em Bash, podemos usar outras ferramentas como awk
ou manipular strings diretamente, mas date
é direto e amplamente disponível. Ao converter datas para segundos (Epoch time), é simples fazer operações matemáticas com elas.
Detalhes de implementação incluem preocupação com fuso horário e formato de data local. Uso do comando date
varia entre sistemas e é importante conferir a documentação específica da sua distribuição.
Veja Também
- Tutorial Bash Avançado: https://www.gnu.org/software/bash/manual/
- Documentação do comando
date
: https://man7.org/linux/man-pages/man1/date.1.html - Stack Overflow, para dúvidas específicas de comparação de datas em Bash: https://stackoverflow.com/questions/tagged/bash+date