você está aqui: Home  → Arquivo de Mensagens

O comando date e seus múltiplos recursos

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 23 de janeiro de 2018

O comando date, na sua forma mais simples, exibe a data do sistema:

$ date
Qua Out 25 22:34:03 BRST 2017

Mas não é só isto, podemos usar o comando date para diversas finalidades.

A tabela abaixo apresenta as múltiplas diretivas aceita pelo comando date:

Diretiva Significado
%d Dia
%m Mês em representação numérica
%Y Ano representado em quatro dígitos
%F Equivalente a %Y-%m-%d (formato frequentemente utilizado para inserção em bancos de dados)
%A Dia da semana por extenso

O sinal de + indica que utilizaremos os caracteres de formatação. Na Dicas-L, o arquivo em que escrevo a mensagem do dia, tem o formato AAAAMMDD, ou seja, ano com quatro algarismos, mês com dois algarismos e dia também com dois algarismos. Eu tento escrever tudo com bastante antecedência, então para que meu script descubra qual arquivo formatar, publicar no site, e enviar para os assinantes, eu preciso fazer um teste:

TIP_FILE=`date +%Y%m%d`

if [ -s $TIP_FILE.t2t ]
then
.....

O valor da variável TIP_FILE é obtido a partir do comando date +%Y%m%d. Pela tabela acima, podemos ver que a data gerada tem o formato que preciso (AAAAMMDD). Uma vez obtido o nome do arquivo, faço então um teste para ver se o arquivo existe (if [ -s $TIP_FILE.t2t ]). A diretiva -s verifica se o arquivo existe e se possui tamanho diferente de zero. Caso exista, os comandos subsequentes (não listados) fazem todo o trabalho (formatar, atualizar o site, enviar o email, gerar a lista de autores, lista de artigos, e um monte de outras coisas).

No meu sistema, o idioma é o português do Brasil. Mas dependendo da necessidade, eu posso gerar a saída do comando date em outros idiomas. Para isto, basta definir a variável LANG seguida do comando date:

$ LANG=pt_BR.utf8 date
Qua Out 25 22:51:26 BRST 2017
$ LANG=en date
Wed Oct 25 22:51:32 BRST 2017

Deslocamento no tempo com date

Para informar ao comando date o deslocamento de uma data, utilizamos o parâmetro -d ou --date. O deslocamento pode ser feito em dias (day), semanas(week), meses(month) ou anos(year):

$ date -d "1 month"
Sáb Nov 25 23:01:34 BRST 2017
$ date -d "2 week"
Qua Nov  8 23:01:56 BRST 2017

Para "voltarmos no tempo" utilizamos a variante ago ou então especificamos valores numéricos positivos (para avançar no tempo) e negativos (para datas passadas).

$ date -d "3 year ago"
Sáb Out 25 23:03:20 BRST 2014

No exemplo abaixo, queremos definir a variável amanha com a data do dia seguinte, usando a diretiva tomorrow:

$ amanha=`date +%d --date="tomorrow"`
$ echo $amanha
10
$ amanha=`date +%D --date="tomorrow"`
$ echo $amanha
10/10/17

A diretiva +%d refere-se ao dia do mês, e apenas a ele. Já a diretiva +%D se refere à data completa, no formato dd/mm/aa.

Vejamos mais alguns exemplos:

$ amanha=`date +%D --date="next week"`
$ echo $amanha
10/16/17
$ amanha=`date +%D --date="next month"`
$ echo $amanha
11/09/17
$ amanha=`date +%d --date="-10 days"`
$ echo $amanha
29

As diretivas next week e next month significam respectivamente próxima semana e próximo mês. Vejam que interessante, você pode também fazer contas com a data, como em -10 days, que é a data de hoje menos dez dias. A diretiva +10 days significa, calcule qual será a data somando dez dias à data de hoje.

Até agora lidamos apenas com datas, mas o comando date pode exibir também o horário. Com a conectividade global que temos hoje, suponha que você queira saber o horário na costa oeste dos Estados Unidos, para assistir a uma palestra na Internet que foi anunciada com a hora de Los Angeles. Você precisa traduzir este horário para a hora local, para não perder a palestra. Simples:

$ TZ='America/Los_Angeles' date
Qua Out 25 17:26:50 PDT 2017

Estamos cinco horas adiantados em relação a Los Angeles. TZ é abreviação de timezone.

Em linhas gerais é isto, experimentando com variações dos comandos acima, é possível fazer bastante coisa. Posso arriscar dizer que este comando é um dos mais comumente usados em shell scripts. Vale a pena conhecê-lo melhor.

A documentação do comando date (man date) fornece informações bem detalhadas sobre as diretivas aceitas.



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