Formatando exibição de datas em Linux

Introdução

O comando date exibe ou configura a data e hora do sistema operacional linux. Além disto permite formatar a exibição do horário em diversos formatos, incluindo universal(utc), rfc-822, timestamp ou personalizado.

Sinopse

date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]


Opções

  • -d, --date=STRING — apresenta o horário descrito na STRING, não o atual;
  • -f, --file=DATEFILE — similar ao --date, entretanto é apresentados as linhas individuais em do DATEFILE;
  • -r, --reference=FILE — apresenta a ultima modificação de hora no referido arquivo FILE;
  • -R, --rfc-822 — apresenta a data no formato RFC-822;
  • -s, --set=STRING — configura o horário conforme a descrição em STRING;
  • -u, --utc, --universal — apresenta ou configura a data/hora com o horário 0 (grenwich);
  • --help — apresenta a ajuda do comando;
  • --version — apresenta a versão do comando;

Controles de Formatação

Sequencias de interpretação para exibição:
  • %% — Um literal %
  • %a — Dia da semana abreviado (e.x., Dom)
  • %A — Dia da semana completo (e.x., Quarta)
  • %b — Mês abreviado (e.x., Jan)
  • %B — Mês completo (e.x., Janeiro)
  • %c — data e hora (e.x., Thu Mar 3 23:05:25 2005)
  • %C — Século; como %Y, omitindo os 2 últimos dígitos (e.x., 20)
  • %d — dia do mês (e.x, 01)
  • %D — data; mesmo que %m/%d/%y
  • %e — dia do mês, o mesmo que %_d
  • %F — data completa; o mesmo que %Y-%m-%d
  • %g — Ano com 2 dígitos;
  • %G — Ano com 4 dígitos;
  • %H — hora (00..23)
  • %I — hora (01..12)
  • %j — dia do ano (001..366)
  • %k — hora ( 0..23)
  • %l — hora ( 1..12)
  • %m — Mês (01..12)
  • %M — minuto (00..59)
  • %n — nova linha
  • %N — nanosecondos (000000000..999999999)
  • %p — equivale a AM ou PM, para o formato de 12 horas; branco se desconhecido;
  • %P — como o %p, mas em caixa baixa;
  • %r — apresenta a hora no formato 12-horas (e.x., 11:11:04 PM)
  • %R — 24-horas, senod hora e minutos; o mesmo que %H:%M
  • %s — secondos desde 1970-01-01 00:00:00 UTC
  • %S — secondos (00..60)
  • %t — um tab
  • %T — hora; o mesmo que %H:%M:%S;
  • %u — dia da semana (1..7); 1 is Segunda e 7 Domingo;
  • %U — semana do ano, com Domingo sendo o 1º dia da semana (00..53)
  • %V — semana do ano, no formato ISO, sendo Segunda o 1º dia da semana (01..53)
  • %w — dia da semana (0..6); 0 e Domingo;
  • %W — semana do ano, com sendo Segunda o 1º dia da semana (00..53)
  • %x — data formato en_US (e.x., 12/31/99)
  • %X — hora formato 24h (e.g., 23:13:48)
  • %y — Ano com 2 dígitos (00..99)
  • %Y — Ano com 4 dígitos
  • %z — +hhmm métrica da zona fuso horária (e.x., -0400)
  • %:z — +hh:mm métrica formatada da zona fuso horária (e.x., -04:00)
  • %::z — +hh:mm:ss métrica com precisão em segundos, da zona fuso horária (e.x., -04:00:00)
  • %Z — Abreviação alfabética da zona fuso horária (e.x., BRST)

Comando date no Sistema Operacional

Os computadores sempre usam por base a zona fuso horária 0, ou hora de Grenwich, ou hora universal e exibem a data/hora conforme o fuso horário configurado na máquina. Desta forma, para se saber qual a hora local, a máquina faz uma operação entre o horário universal e o fuso local. Exemplo 1:
hora universal: 12:02:45
fuso: -3:00
hora local: 12:02:45 - 3:00 = 9:02:45
Exemplo 2:
hora universal: 12:02:45
fuso: +3:00
hora local: 12:02:45 + 3:00 = 15:02:45
E o comando date se apropria desta característica para tratar data/hora no sistema operacional.
Observação: Os exemplos deste artigo foram gerados durante o Horário Brasileiro de Verão, também designado como BRST (Brazilian Summer Time), cujo o valor é igual a -2:00;
Sem opções exibe a data/hora local
# date Tue Dec 6 14:32:31 BRST 2011
Com as opções -u, ou --utc, ou --universal exibe a data/hora 0
# date -u Tue Dec 6 16:49:19 UTC 2011
date --utc Tue Dec 6 16:49:45 UTC 2011
date --universal Tue Dec 6 16:49:40 UTC 2011
Para alterar a hora e data do sistema, a sintaxe apresentada na seção sintaxe date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] , representa:
  • -u, -utc ou --universal — são equivalentes e representam o horário de Grenwich, zona fuso horária 0;
  • MM — Mês com 2 digitos;
  • DD — Dia com 2 digitos;
  • hh — Hora com 2 digitos;
  • mm — Minutos com 2 digitos;
  • [CC] — Século com 2 digitos;
  • YY — Ano com 2 digitos;
  • [.ss] — Segundos com 2 digitos;

Alterando a data/hora local

date 120614322011.30 Tue Dec 6 14:32:30 BRST 2011
No exemplo foi usado 06/12/2011 às 14:32:30h.
date 120614322011 Tue Dec 6 14:32:00 BRST 2011
Normalmente não se preocupa-se com segundos, podendo alterar a data para 06/12/2011 às 14:32h, como no exemplo acima.

Alterando a data/hora universal

date -u 120614322011.30 Tue Dec 6 14:32:30 UTC 2011
date --utc 120614322011.30 Tue Dec 6 14:32:30 UTC 2011
date --universal 120614322011.30 Tue Dec 6 14:32:30 UTC 2011
Alterado com precisão em segundos;
date -u 120614322011 Tue Dec 6 14:32:00 UTC 2011
date --utc 120614322011 Tue Dec 6 14:32:00 UTC 2011
date --universal 120614322011 Tue Dec 6 14:32:00 UTC 2011
Alterado sem a precisão de segundos.

Formatar a exibição

As opções apresentadas na sessão controle de formatação, permitem modificar a forma de exibição da data/hora. Formato definido pela RFC 822
date --rfc-822 --date "sun oct 1 5:45:02PM"
Wed, 01 Oct 2003 17:45:02 -0300
Formato ISO-8601 definido na RFC-3339 internet recommended format
date --iso-8601=seconds --date "sun oct 1 5:45:02PM"
2003-10-01T17:45:02-0300
date --iso-8601=minutes
2011-12-06T14:32-0200
Alteração da exibição padrão do Sistema Operacional
date -s "11/20/2003 12:48:00"
Thu Nov 20 12:48:05 BRST 2003
Operações com data/hora
date --date "now +1 months -5 days"
Sun Jan 1 13:20:45 BRST 2012
Apresentação de data/hora com exibição modificada
date --date "2006-10-05 06:55:55 -5 hours -11 min -10 sec"
Thu Oct 5 09:44:45 BRT 2006
Segundos desde 1970-01-01 00:00:00 UTC para a data e hora atual
date +%s
1323189344
Segundos desde 1970-01-01 00:00:00 UTC para a datas específicas
date --date "5/7/2009" +%s; #7/Mai/2009
1241665200
date --date "05 Jul 2009 08:41:50" +%s
1246794110
Formato de exibição completo
date +%c
Tue 06 Dec 2011 03:10:40 PM BRST
Formato de exibição completo para data específica
date --date "05 Jul 2009 08:41:50" +%c
Dom 05 Jul 2009 08:41:50 BRT
date --date "7/5/2009 7:04:59" +%c; 5/Jul/2009
Dom 05 Jul 2009 07:04:59 BRT
Formatos personalizados
date '+DATA: %m/%d/%y%nHORA: %H:%M:%S'
DATA: 12/06/11 HORA: 13:16:09
date --date "sun oct 1 5:45:02PM" +%FT%T%z
2003-10-01T17:45:02-0300
date +%FT%T%z
2011-12-06T14:43:00-0200
date +%F%t%T%z
2011-12-06T14:43:00-0200
date +%Y%m%d
20111206
date +%F
2011-12-06
date +%Y-%m-%d
2011-12-06
date +%Y/%m/%d
2011/12/06
date +%D
12/06/11
date +%D-%T
12/06/11-14:53:33

Sequências

Comando date parte 2: Epoch x Unix Timestamp com o comando 'date'

Referências

man date http://www.faqs.org/rfcs/rfc822.html http://www.faqs.org/rfcs/rfc3339.html http://www.computerhope.com/unix/udate.htm#03 http://www.unix.com/tips-tutorials/31944-simple-date-time-calulation-bash.html

Comentários