Lexikograficky můžete porovnat s podmíněným konstruktem [[ ]]
tímto způsobem:
[[ "2014-12-01T21:34:03+02:00" < "2014-12-01T21:35:03+02:00" ]]
Od muže:
[[výraz]]
Vrátí stav 0 nebo 1 v závislosti na vyhodnocení výrazu podmíněného výrazu.
Nová aktualizace:
Pokud potřebujete porovnat časy s různými časovými pásmy, můžete tyto časy nejprve převést tímto způsobem:
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
Jednou z možností by bylo převést datum na počet sekund od epochy UNIX:
date -d "2014-12-01T21:34:03+02:00" +%s
Toto celé číslo pak můžete porovnat s jiným datem, které bylo zpracováno stejným způsobem:
(( $(date -d "2014-12-01T21:34:03+02:00" +%s) < $(date -d "2014-12-01T21:35:03+02:00" +%s) ))
((
))
syntaxe se používá k vytvoření aritmetického kontextu, když porovnáváme dvě čísla. Můžete také použít obecnější [ ${x} -lt ${y} ]
syntaxe stylu, pokud jde o přenositelnost.
Jednou z výhod tohoto způsobu je, že date
rozumí například různým formátům
date -d "next year" +%s
. Dále date
rozumí časovým pásmům, takže dokáže správně zpracovat srovnání mezi dvojicemi dat, kde se časové pásmo liší.
Pokud se vás však ani jeden z těchto problémů netýká, šel bych po řešení j.a.