Gostaria de ajudar?

terça-feira, 5 de junho de 2012

Comando "date" Linux

Durante o desenvolvimento de alguns programas eu precisei criar uma data formatada, as vezes para baixar dados, gerar título de figuras ou nome de imagens e etc você precisa de uma data formatada para inserir no teu programa/script e etc. Difícil de entender? Eu explico. Imagina que você criou um script .sh que executa um script GrADS para gerar algumas imagens de precpitação por exemplo e você quer que cada imagem seja salva com a seguinte estrutura (prec_anomesdia.gif) sendo que neste caso especifico o parâmetro dia vamos dizer assim seja variável, uma forma de conseguir esta data é utilizando o comando "date" do linux.

Com o comando "date" é possível Exibir e Alterar a data/hora do Sistema, Exibir a data/hora Formatada e Efetuar cálculos com Data e Hora.

A utilização deste comando é fácil basta utilizar alguns parâmetros disponiveis:

%%   um % literal
%a    nome abreviado do dia da semana do idioma (ex.: Dom)
%A    nome completo do dia de semana na localidade (por exemplo, Sábado)
%b
    nome abreviado do mês na localidade (por exemplo, Jan)
%B    nome completo do mês na localidade (por exemplo, Janeiro)
%c    data e hora na localidade (por exemplo, Sáb 08 Mar 2008 18:34:17 BRT)
%C   século; como %Y, exceto a omissão dos dois últimos dígitos (ex.: 20)
%d   dia do mês (ex.: 01)
%D   data; o mesmo que %m/%d/%y
%e   dia do mês, preenchido por espaço; o mesmo que %_d
%F   data completa; o mesmo que %Y-%m-%d
%g   os últimos dois dígitos do ano do número ISO da semana (veja %G)
%G   ano do número ISO da semana ISO (veja %V); normalmente útil só com %V
%h   o mesmo que %b
%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    um caractere de nova-linha
%N   nanosegundos (000000000..999999999)
%p   o equivalente na localidade para AM ou PM; em branco se desconhecido
%P   como %p, mas em minúsculas
%r    a hora no relógio de 12 horas na localidade (por exemplo, 11:11:04 PM)
%R   hora e minuto no estilo 24 horas; o mesmo que %H:%M
%s    segundos desde 1970-01-01 00:00:00 UTC
%S   segundo (00..60)
%t    uma tabulação
%T   as horas; o mesmo que %H:%M:%S
%u   dia da semana (1..7); 1 é segunda-feira
%U   número da semana no ano, sendo domingo o início da semana (00..53)
%V   número ISO da semana, sendo segunda-feira o início da semana (01..53)
%w   dia da semana (0..6); 0 é domingo
%W   número da semana no ano, sendo segunda-feira o início da semana (00..53)
%x    representação da data na localidade (por exemplo, 31/12/99)
%X    representação da hora na localidade (por exemplo, 23:13:48)
%y    os últimos dois dígitos do ano (00..99)
%Y    ano quatro digitos (por exemplo 2012)
%z    fuso horário numérico +hhmm (por exemplo, -0300)
%:z   fuso horário numérico +hh:mm (por exemplo, -03:00)
%::z  fuso horário numérico +hh:mm:ss (por exemplo, -03:00:00)
%:::z  fuso horário numérico com : para a precisão necessária (por exemplo, -04, +05:30)
%Z   abreviação alfabética do fuso horário (por exemplo, BRT)

Se você for agora (05/06/2012 16:42) e digitar date em seu terminal o sistema te retornará:

>date
>Ter Jun  5 16:42:49 BRT 2012

Existem algumas formas de você combinar os parâmetros listados acima e ter como resultado uma data na estrutura/ordem que você deseja, segue alguns exemplos:

>date +%d%m%Y
>05062012

Caso você queira separar com uma"/" cada informação é só inserir uma barra antes de cada simbolo de "%":

>date +%d/%m/%Y
>05/06/2012 

Para o ano apenas com dois dígitos:

>date +%d/%m/%y
>05/06/12 

É possível manipular apenas a horas: (observe que precisamos inserir ":" para separar horas, minutos e segundos)

>date +%H:%M:%S
>16:42:49

Se você desejar inserir o nome do mês e não o número também é possível: (observe que este comando é preciso esta entre aspas "" e existe um espaço entre um parâmetro e outro caso contrario a informação virá junta).

>date "+%d %B %Y"
>05 Junho 2012

Uma outra informação referente a estrutura anterior é que você pode inserir o "de" em sua data, para isso digite:

>date "+%d "de" %B "de" %Y"
>05 de junho de 2012

Caso precise inserir o dia da semana o comando seria o seguinte:

>date "+%d "de" %B "de" %Y, %A"
>05 de junho de 2012, terça

Este comando é sensacional, se soubermos utilizá-lo bem tiramos bastante proveito dele, para quem trabalha operacionalmente ou quem costuma baixar dados diariamente, fazer imagens/figuras diariamente ou executar um determinado script operacionalmente vai fazer bom proveito dele.

Com o comando date também é possível conseguir datas anteriores ou posteriores. Exemplos:

Em meu script eu preciso de uma data de cinco dias atrás e cinco dias para frente, para isso:

>date +%d/%m/%Y -d "5 days ago"
>31/05/2012

>date +%d/%m/%Y -d "5 days"
>10/06/2012

Também é possivel por exemplo saber a data um mês e dois dias atrás, uma semana e um dia, ou que dia nós teremos caso adicionarssemos 49 horas a nossa data atual?

Um mês e dois dias atrás:

>date -d "1 month ago 2 day ago"
>Qui Mai  3 16:42:49 BRT 2012

Um mês e dois dias a frente:

>date -d "1 month 2 day"
>Sab Jul  7 16:42:49 BRT 2012

Uma semana e um dia atrás:

>date -d "1 week ago 1 day ago"
> Seg Mai 28 16:42:49 BRT 2012

Que dia teremos se adicionarmos 49 horas na data atual?

>date --date "49 hours"
>Qui Jun 7 17:42:49 BRT 2012

Existe uma serie de combinações possíveis, segue alguns exemplos:

Se usarmos o comando:
>date
ou
>date --date=now
ou
>date --date=today
o resultado é o mesmo

>date --date='10 minutes'
>Ter Jun 5 16:52:49 BRT 2012


>date --date='10 seconds ago'
>Ter Jun 5 16:42:39 BRT 2012

>date --date='10 hours'
>Ter Jun 5 02:42:39 BRT 2012

>date --date='tomorrow'
>Qua Jun 6 16:42:49 BRT 2012

>date --date='10 day'
>Sex Jun 15 16:42:49 BRT 2012

>date --date='yesterday'
>Seg Jun 4 16:42:49 BRT 2012

>date --date='1 fortnight'
>Ter Jun 19 16:42:49 BRT 2012

>date --date='1 year'
>Ter Jun 5 16:42:49 BRT 2013

Bom galera é isso, depois eu irei inserir aqui um script que manipula essas datas. Tem um post em um forum de altoria do Rafael Brianezi da Silva no qual eu tomei base para escrever este, segue.

Boa Sorte e Bom Trabalho a Todos!!

Um comentário :