GNU/Linux >> Tutoriels Linux >  >> Linux

Comparaison de dates dans Bash

Vous pouvez comparer lexicographiquement avec la construction conditionnelle [[ ]] de cette manière :

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

De l'homme :

[[ expression ]]
Renvoie un statut de 0 ou 1 selon l'évaluation de l'expression conditionnelle expression.

Nouvelle mise à jour :

Si vous avez besoin de comparer des heures avec différents fuseaux horaires, vous pouvez d'abord convertir ces heures de cette manière :

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

Une option serait de convertir la date en nombre de secondes depuis l'époque UNIX :

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

Vous pouvez alors comparer cet entier à une autre date qui a été traitée de la même manière :

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

Le (( )) La syntaxe est utilisée pour créer un contexte arithmétique lorsque nous comparons deux nombres. Vous pouvez également utiliser le [ ${x} -lt ${y} ] plus général syntaxe de style si la portabilité est un problème.

L'un des avantages de procéder ainsi est que date comprend une variété de formats, par exemple
date -d "next year" +%s . De plus, date comprend les fuseaux horaires, de sorte qu'il peut gérer correctement les comparaisons entre des paires de dates où le fuseau horaire est différent.

Cependant, si aucun de ces problèmes ne vous concerne, j'opterais pour la solution de j.a.


Linux
  1. Obtenir mtime d'un fichier spécifique en utilisant Bash ?

  2. Convertir les formats de date en bash

  3. vérifier si l'argument est une date valide dans le shell bash

  4. Obtenez la date d'hier dans bash sous Linux, DST-safe

  5. soustraire des jours d'une date en bash

Déclaration de cas bash

Commande de date sous Linux

Instruction Bash if..else

Tableaux bash

Bash Shebang

Comment utiliser la commande de date dans les scripts bash sous Linux