GNU/Linux >> Tutoriales Linux >  >> Linux

Comparación de fechas en Bash

Puede comparar lexicográficamente con la construcción condicional [[ ]] de esta manera:

[[ "2014-12-01T21:34:03+02:00" < "2014-12-01T21:35:03+02:00" ]]

Del hombre:

[[ expresión ]]
Devuelve un estado de 0 o 1 dependiendo de la evaluación de la expresión de expresión condicional.

Nueva actualización:

Si necesita comparar horas con diferentes zonas horarias, primero puede convertir esas horas de esta manera:

get_date() {
    date --utc --date="$1" +"%Y-%m-%d %H:%M:%S"
}

$ get_date "2014-12-01T14:00:00+00:00"
2014-12-01 14:00:00

$ get_date "2014-12-01T12:00:00-05:00"
2014-12-01 17:00:00

$ [[ $(get_date "2014-12-01T14:00:00+00:00") < $(get_date "2014-12-01T12:00:00-05:00") ]] && echo it works
it works

Una opción sería convertir la fecha al número de segundos desde la época de UNIX:

date -d "2014-12-01T21:34:03+02:00" +%s

Luego puede comparar este número entero con otra fecha que haya sido procesada de la misma manera:

(( $(date -d "2014-12-01T21:34:03+02:00" +%s) < $(date -d "2014-12-01T21:35:03+02:00" +%s) ))

El (( )) la sintaxis se usa para crear un contexto aritmético cuando estamos comparando dos números. También podría usar el [ ${x} -lt ${y} ] más general sintaxis de estilo si la portabilidad es una preocupación.

Una ventaja de hacerlo de esta manera es que date entiende una variedad de formatos, por ejemplo
date -d "next year" +%s . Además, date entiende las zonas horarias, por lo que puede manejar correctamente las comparaciones entre pares de fechas donde la zona horaria es diferente.

Sin embargo, si ninguno de esos problemas le preocupa, entonces optaría por la solución de j.a.


Linux
  1. ¿Obtener mtime de un archivo específico usando Bash?

  2. Convertir formatos de fecha en bash

  3. comprobar si el argumento es una fecha válida en bash shell

  4. ¿Cómo obtener la fecha/hora de creación del archivo en Bash/Debian?

  5. Bash - Comando de fecha y espacio

Declaración de caso Bash

Comando de fecha en Linux

Declaración de Bash if..else

Arreglos bash

Bash Shebang

Cómo usar el comando de fecha en Bash Scripting en Linux