Comparação de horários date [RESOLVIDO]

1. Comparação de horários date [RESOLVIDO]

Diego Lopes dos Santos
diegovitr

(usa Ubuntu)

Enviado em 12/09/2016 - 14:21h

Olá Pessoal!

Estou com uma dificuldade com comparação de horas. Estou a pouco tempo mexendo com shell script e não sei manipular bem 'date'.

Tenho um arquivo de horarios onde verifico, se a execução do script principal esteja dentro desses horários lidos.
Conteúdo do arquivo de horários:
11:00-12:30
13:30-14:00
17:00-18:00
23:30-00:00
O que preciso é verificar se esta lista de horários foi digitada errada... tipo 17:00-16:00 o que seria o correto seria 16:00-17:00.
Quando o horário inicial for maior que o final executo uma ação e gravo um log sobre o erro.

O que não estou conseguindo resolver é quando o for chega no horário 23:30-00:00 ou 23:30-00:01..... esta dando que 23:30 é "maior"
que 00:00 e o correto seria "menor"


# Neste 'for' efetuo a leitura da lista de horarios e efetuo um teste simples so pra ver se esta funcionando como esperado
for window in $windowList; do
windowStart=$(echo $window | awk -F'-' '{print $1}' | sed 's/\://g')
windowFinish=$(echo $window | awk -F'-' '{print $2}' | sed 's/\://g')


StartDate=$(date -u -d `echo "$windowStart"` +"%s")
FinalDate=$(date -u -d `echo "$windowFinish"` +"%s")

# verifico se o horário inicial é maior ou igual ao horário final
if [ $StartDate -ge $FinalDate ]; then
echo "Horario $windowStart é maior que $windowFinish"
else
echo "Horario $windowStart é menor que $windowFinish"
fi

done


Saída do 'for' acima:
Horario 1100 é menor que 1230
Horario 1330 é menor que 1400
Horario 1700 é menor que 1800
Horario 2330 é maior que 0000 <--- aqui deveria ser 'Horario 2330 é maior que 0000'



  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 12/09/2016 - 15:03h

diegovitr escreveu:

Olá Pessoal!

Estou com uma dificuldade com comparação de horas. Estou a pouco tempo mexendo com shell script e não sei manipular bem 'date'.

Tenho um arquivo de horarios onde verifico, se a execução do script principal esteja dentro desses horários lidos.
Conteúdo do arquivo de horários:
11:00-12:30
13:30-14:00
17:00-18:00
23:30-00:00
O que preciso é verificar se esta lista de horários foi digitada errada... tipo 17:00-16:00 o que seria o correto seria 16:00-17:00.
Quando o horário inicial for maior que o final executo uma ação e gravo um log sobre o erro.

O que não estou conseguindo resolver é quando o for chega no horário 23:30-00:00 ou 23:30-00:01..... esta dando que 23:30 é "maior"
que 00:00 e o correto seria "menor"


# Neste 'for' efetuo a leitura da lista de horarios e efetuo um teste simples so pra ver se esta funcionando como esperado
for window in $windowList; do
windowStart=$(echo $window | awk -F'-' '{print $1}' | sed 's/\://g')
windowFinish=$(echo $window | awk -F'-' '{print $2}' | sed 's/\://g')


StartDate=$(date -u -d `echo "$windowStart"` +"%s")
FinalDate=$(date -u -d `echo "$windowFinish"` +"%s")

# verifico se o horário inicial é maior ou igual ao horário final
if [ $StartDate -ge $FinalDate ]; then
echo "Horario $windowStart é maior que $windowFinish"
else
echo "Horario $windowStart é menor que $windowFinish"
fi

done


Saída do 'for' acima:
Horario 1100 é menor que 1230
Horario 1330 é menor que 1400
Horario 1700 é menor que 1800
Horario 2330 é maior que 0000 <--- aqui deveria ser 'Horario 2330 é maior que 0000'

Boa tarde diegovitr.
A "saída" esta correta!!!
Convertendo em segundos:
23:30 = 1473733800 => Seg Set 12 23:30:00 BRT 2016
00:00 = 1473649200 => Seg Set 12 00:00:00 BRT 2016


Atente-se ao DETALHE, a "contagem" das HORAS, começa com 00:00:00:000000000, logo, 23:30 é MAIOR que 00:00:00 . . . :)
Aproveitando, otimizei o seu script:
while IFS="-" read -r Tini Tfin;do 
HI=$(date -d"$Tini" +%s)
HF=$(date -d"$Tfin" +%s)
((HI<HF)) && echo "CORRETO HI:$HI HF:$HF" || echo "ERRADO HI:$HI HF:$HF"
done<HORAS.txt


Para OBTER o ESPERADO, ALTERE "00:00" para "23:59"

Att.:
Marcelo Oliver


3. Re: Comparação de horários date [RESOLVIDO]

marcio mendes mendes
conectadohost

(usa XUbuntu)

Enviado em 12/09/2016 - 16:56h

+1
Olá,
É isso ai,
eu ia ajudar mas o Mestre @msoliver já resolveu o tópico.

---> Márcio M M <---


4. Re: Comparação de horários date [RESOLVIDO]

Diego Lopes dos Santos
diegovitr

(usa Ubuntu)

Enviado em 14/09/2016 - 09:30h

msoliver escreveu:

diegovitr escreveu:

Olá Pessoal!

Estou com uma dificuldade com comparação de horas. Estou a pouco tempo mexendo com shell script e não sei manipular bem 'date'.

Tenho um arquivo de horarios onde verifico, se a execução do script principal esteja dentro desses horários lidos.
Conteúdo do arquivo de horários:
11:00-12:30
13:30-14:00
17:00-18:00
23:30-00:00
O que preciso é verificar se esta lista de horários foi digitada errada... tipo 17:00-16:00 o que seria o correto seria 16:00-17:00.
Quando o horário inicial for maior que o final executo uma ação e gravo um log sobre o erro.

O que não estou conseguindo resolver é quando o for chega no horário 23:30-00:00 ou 23:30-00:01..... esta dando que 23:30 é "maior"
que 00:00 e o correto seria "menor"


# Neste 'for' efetuo a leitura da lista de horarios e efetuo um teste simples so pra ver se esta funcionando como esperado
for window in $windowList; do
windowStart=$(echo $window | awk -F'-' '{print $1}' | sed 's/\://g')
windowFinish=$(echo $window | awk -F'-' '{print $2}' | sed 's/\://g')


StartDate=$(date -u -d `echo "$windowStart"` +"%s")
FinalDate=$(date -u -d `echo "$windowFinish"` +"%s")

# verifico se o horário inicial é maior ou igual ao horário final
if [ $StartDate -ge $FinalDate ]; then
echo "Horario $windowStart é maior que $windowFinish"
else
echo "Horario $windowStart é menor que $windowFinish"
fi

done


Saída do 'for' acima:
Horario 1100 é menor que 1230
Horario 1330 é menor que 1400
Horario 1700 é menor que 1800
Horario 2330 é maior que 0000 <--- aqui deveria ser 'Horario 2330 é maior que 0000'

Boa tarde diegovitr.
A "saída" esta correta!!!
Convertendo em segundos:
23:30 = 1473733800 => Seg Set 12 23:30:00 BRT 2016
00:00 = 1473649200 => Seg Set 12 00:00:00 BRT 2016


Atente-se ao DETALHE, a "contagem" das HORAS, começa com 00:00:00:000000000, logo, 23:30 é MAIOR que 00:00:00 . . . :)
Aproveitando, otimizei o seu script:
while IFS="-" read -r Tini Tfin;do 
HI=$(date -d"$Tini" +%s)
HF=$(date -d"$Tfin" +%s)
((HI<HF)) && echo "CORRETO HI:$HI HF:$HF" || echo "ERRADO HI:$HI HF:$HF"
done<HORAS.txt


Para OBTER o ESPERADO, ALTERE "00:00" para "23:59"

Att.:
Marcelo Oliver


Marcelo Muitissimo obrigado. ótima explicação. Deus te abençoe



5. Re: Comparação de horários date [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 14/09/2016 - 10:25h

diegovitr escreveu:
Marcelo Muitíssimo obrigado. ótima explicação. Deus te abençoe

Amém a nos todos.
Precisando, estou por aqui.

O fato de "00:00" ser MENOR que "23:30" ocorre pq não é especificado a "DATA".
Como quer informar que o inicio foi as 23:30, teve uma duração de 00:30, faça:
2016-09-13 23:00 2016-09-14 00:00
Script ALTERADO:
while IFS=" " read -r Dini Tini Dfin Tfin; do
HI=$(date -d"$Dini $Tini" +%s)
HF=$(date -d"$Dfin $Tfin" +%s)
((HI<HF)) && echo "CORRETO HI:$HI HF:$HF" || echo "ERRADO HI:$HI HF:$HF"
done<HORAS.txt


Abç,
Marcelo Oliver








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts