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.