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.
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
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.