Converter string de data formatada para UNIXTIME [RESOLVIDO]

1. Converter string de data formatada para UNIXTIME [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 03/08/2011 - 20:59h

Olá linuxers.

Estou gravando o momento exato que o arquivo foi acessado pela última vez para uso em uma outra comparação de tempo.
O valor estou armazenando em uma variável e gravando em um log da seguinte forma.

$ MEU_ULT_ACESSO=$(stat -c %y Contador1.txt | cut -c 1-29 )

$ echo $MEU_ULT_ACESSO

resultado: 2011-08-03 20:54:47.326037578

Em outro momento eu faço a mesma coisa, mas agora usando a data em que estou:

$ MEU_MOMENTO=$(date "+%F %R:%S.%N" )

echo $MEU_MOMENT

resultado: 2011-08-03 20:54:47.605530983

Note que a data e o segundo é o mesmo AS VEZES.

Preciso comparar a data e o horário gerando UNIXTIME acho...
Se for (igual igual) mesmo segundo. Vou verificar a diferença no nanosegundo se é maior que 100 centésimos e tomar uma atitude.
O meu problema está na questão da data completa. Não estou conseguindo converter corretamente o tempo para comparar.
Fiz uns testes e sempre vem zerado os minutos e segundos.
Deve ser alguma peça com defeito atras do teclado, rsrs, mas ainda não descobri.

Alguém pode dar uma luz ?

Obrigado.

GA

ps: Eu sei que irão achar loucura a questão da verificação dentro do mesmo segundo. O motivo é ainda a pendência do monitoramento de acessos neste tópico:

http://www.vivaolinux.com.br/topico/Shell-Script/Controlar-acesso-de-arquivos-usando-Shell-Script/



  


2. Re: Converter string de data formatada para UNIXTIME [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 04/08/2011 - 01:57h

Alguém pode conferir se está correto esta solução ou existe outra melhor ?
Deixei a questão dos nanosegundos de lado porque vou comparar em separado e somente se forem data, hora , minutos e segundos iguais.
Para conversão da data em timestamp

# Pego o horário da última alteração do arquivo para comparar. Sem usar os nanosegundos.
$ MEU_ULT_ACESSO=$(stat -c %y Contador43.txt | cut -c 1-19 )

Resultado: 2011-08-03 14:23:03

# Convertendo para timestamp

MEU_TIMESTAMP="$(date --date "$MEU_ULT_ACESSO" +%s)"

Resultado: 1312392183

========================================
Parece que o timestamp está certinho.
Para pegar do outro lado estou usando o date direto, mas tá dando uma diferença de 3 horas.
Deve ser algo relacionado com o meu local -3:00 mas não estou conseguindo fazer a conta correta.
Não vou usar este valor na comparação e sim para gravar em log. Com esta diferença de 3 horas pega mal rsrs.
Fiz assim:

$ date +%s

Resulta: 1312433556

Já o arquivo quando eu converto de volta de timestamp para data normal tá dando diferença.

$ date --date "1970-01-01 1312431298 sec" "+%F-%R-%S"

Deve ser fuso horário, mas o bocoió aqui não sabe usar.

%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)

Qualquer empurrar pra quem está na beira do barranco serve :)

Obrigado.



3. Re: Converter string de data formatada para UNIXTIME [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 04/08/2011 - 06:47h

Onde estou errando ?

$ MEU_ULT_ACESSO=$(date +%F-%R-%S)
$ echo $MEU_ULT_ACESSO
#### Resultado 2011-08-04-06:46-54
#### Tentando colocar em timestamp
$ MEU_TIMESTAMP="$(date --date "$MEU_ULT_ACESSO" +%s)
#### date: data inválida "2011-08-04-06:46-54"

Como montar este timestamp se tenho na variável o valor formatado "2011-08-04-06:46-54" ?





4. Re: Converter string de data formatada para UNIXTIME [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 04/08/2011 - 10:53h

Continuando o aprendizado para tratar datas, consegui encontrar uma forma para colocar em uma variável de teste tanto o timestamp e a data formatada para saber se a conversão está funcionando mesmo.

$ VAR_TIMESTAMP_AAAAMMDDHHMMSS="MeuTimeStamp: $(date "+%s") DataFormatada: $(date -d @$(date +%s) +%F-%R-%S)"
$ echo $VAR_TIMESTAMP_AAAAMMDDHHMMSS

Resulta em: MeuTimeStamp: 1312465730 DataFormatada: 2011-08-04-10:48-50

Agora eu posso aplicar no teste o TimeStamp resultante para saber se vai mostrar a data igual mesmo.
Estou só fazendo a conferência para entender se a data vai ser calculada como estou esperando.
Peguei o valor do MeuTimeStamp: 1312465730

$ date -d @1312465730 +%F-%R-%S

Resulta em: 2011-08-04-10:48-50

Agora tenho certeza que se aplicar as conversões tanto de uma lado quanto do outro vai dar certo.

Ah, não posso dar como resolvido porque a pendência inicial ainda continua.

Como pegar a data formatada assim: 2011-08-04-10:48-50 e transformar em timestamp com este valor: 1312465730

Deve ser uma moleza rsrs, mas ainda tô apanhando.


5. Re: Converter string de data formatada para UNIXTIME [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 04/08/2011 - 12:16h

Como sou bisonho !!! Encontrei o culpado rsrs eu mesmo como sempre.

Quando salvo a data formatada aqui:
$ VAR_TIMESTAMP_AAAAMMDDHHMMSS="MeuTimeStamp: $(date "+%s") DataFormatada: $(date -d @$(date +%s) +%F-%R-%S)"

Cometi um erro ao colocar o formato. Mudei para o exemplo aqui:

http://www.gnu.org/software/tar/manual/html_node/General-date-syntax.html#SEC120

$ VAR_TIMESTAMP_AAAAMMDDHHMMSS="MeuTimeStamp: $(date "+%s") DataFormatada: $(date +'%Y-%m-%d %H:%M:%S %z')"

Resulta em: MeuTimeStamp: 1312470383 DataFormatada: 2011-08-04 12:06:23 -0300

Agora vou pegar a data formatada e conferir para saber o seu timestamp.

$ (date --date '2011-08-04 12:06:23 -0300' +%s)

Resulta em: 1312470383

Já consigo pegar a data formatada nas gravações do log e transformar em timestamp. Comparo com a existente nos arquivos, e verifico o momento dos outros acessos, exemplo:

$ stat -c %y Contador43.txt | cut -c 1-29

Resulta em: 2011-08-03 14:23:03.626037578

Problema resolvido.








6. Re: Converter string de data formatada para UNIXTIME [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 04/08/2011 - 12:19h

Veja se este link te dá uma luz... Boa sorte!!!
http://sekysu.blogspot.com/2010/09/shell-script-para-auditoria-de-arquivos.html


7. Re: Converter string de data formatada para UNIXTIME [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 04/08/2011 - 12:36h

OK @.ronin

Já estou vendo. :)


8. Re: Converter string de data formatada para UNIXTIME [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 04/08/2011 - 12:44h

[citando] @.ronin Veja se este link te dá uma luz... Boa sorte!!!
http://sekysu.blogspot.com/2010/09/shell-script-para-auditoria-de-arquivos.html
[/citando]

Guardar em variável o último acesso a um arquivo: http://twitter.com/AprendiNoLinux/status/99142302064324608
Nem sei quais são os comandos para citar frases... vou pesquisar depois.

Olha a casa já está mais iluminada :) Gostei sim do script. Para esta aplicação que estou tentando fazer, com certeza, em alguma etapa será útil. :)

@AprendiNoLinux - http://twitter.com/AprendiNoLinux/status/99145972185178112

Data formatada p/ timestamp: http://twitter.com/AprendiNoLinux/status/99149273828036608






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts