Pesquisei e encontrei várias maneiras de verificar se um carimbo de data/hora está entre dois carimbos de data/hora, mas todos os métodos assumem HH:MM:SS
apenas formato, sem levar em consideração date .
Meu cenário da vida real é a entrada de carimbos de data/hora de um arquivo de log em um formato comum que inclui data e milissegundos: 2019-11-11 19:05:55,823
.
Digamos que eu tenha um determinado timestamp 2019-11-11 19:05:55,823
, como faço para descobrir se está dentro ou fora do intervalo:
2019-11-11 17:02:54,479
2019-11-12 05:13:55,998
?
Com o bash especificamente, deve ser apenas uma questão de:
Isso faz uma comparação lexical. Isso funciona porque na localidade C, essas representações de data classificam o mesmo lexicalmente e cronologicamente.
bash
's[[ < / > ]]
usamstrcoll()
para comparar strings, então use o algoritmo de agrupamento de localização. Na localidade Cstrcoll()
deve funcionar comostrcmp()
. Em outras localidades, ele compara de acordo com as convenções da localidade, então você não tem muita garantia sobre o resultado.POSIXly, você pode usar:
Agora, se você estiver processando arquivos de log, provavelmente desejará fazer essa comparação com
awk
. Supondo que os timestamps estejam no início de cada linha:imprimiria as linhas que começam com um carimbo de data/hora nesse intervalo.