Puoi confrontare lessicograficamente con il costrutto condizionale [[ ]]
in questo modo:
[[ "2014-12-01T21:34:03+02:00" < "2014-12-01T21:35:03+02:00" ]]
Dall'uomo:
[[espressione]]
Restituisce uno stato di 0 o 1 a seconda della valutazione dell'espressione condizionale expression.
Nuovo aggiornamento:
Se devi confrontare orari con fusi orari diversi, puoi prima convertire questi orari in questo modo:
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
Un'opzione potrebbe essere quella di convertire la data nel numero di secondi trascorsi dall'epoca UNIX:
date -d "2014-12-01T21:34:03+02:00" +%s
Puoi quindi confrontare questo numero intero con un'altra data che è stata elaborata allo stesso modo:
(( $(date -d "2014-12-01T21:34:03+02:00" +%s) < $(date -d "2014-12-01T21:35:03+02:00" +%s) ))
Il ((
))
la sintassi viene utilizzata per creare un contesto aritmetico mentre confrontiamo due numeri. Puoi anche usare il più generico [ ${x} -lt ${y} ]
style syntax se la portabilità è un problema.
Un vantaggio di farlo in questo modo è che date
comprende una varietà di formati, ad esempio
date -d "next year" +%s
. Inoltre, date
comprende i fusi orari, quindi può gestire correttamente i confronti tra coppie di date in cui il fuso orario è diverso.
Tuttavia, se nessuno di questi problemi ti preoccupa, allora sceglierei la soluzione di j.a..