Anda dapat membandingkan secara leksikografis dengan konstruk bersyarat [[ ]]
dengan cara ini:
[[ "2014-12-01T21:34:03+02:00" < "2014-12-01T21:35:03+02:00" ]]
Dari pria itu:
[[ ekspresi ]]
Mengembalikan status 0 atau 1 bergantung pada evaluasi ekspresi ekspresi bersyarat.
Pembaruan baru:
Jika Anda perlu membandingkan waktu dengan zona waktu yang berbeda, pertama-tama Anda dapat mengonversi waktu tersebut dengan cara ini:
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
Salah satu opsi adalah mengonversi tanggal menjadi jumlah detik sejak zaman UNIX:
date -d "2014-12-01T21:34:03+02:00" +%s
Anda kemudian dapat membandingkan bilangan bulat ini dengan tanggal lain yang telah diproses dengan cara yang sama:
(( $(date -d "2014-12-01T21:34:03+02:00" +%s) < $(date -d "2014-12-01T21:35:03+02:00" +%s) ))
((
))
sintaks digunakan untuk membuat konteks aritmatika saat kita membandingkan dua angka. Anda juga dapat menggunakan [ ${x} -lt ${y} ]
yang lebih umum sintaks gaya jika portabilitas menjadi perhatian.
Salah satu keuntungan melakukannya dengan cara ini adalah date
memahami berbagai format, misalnya
date -d "next year" +%s
. Selanjutnya, date
memahami zona waktu, sehingga dapat menangani perbandingan antara pasangan tanggal dengan zona waktu yang berbeda dengan benar.
Namun, jika tidak satu pun dari masalah itu yang menjadi perhatian Anda, maka saya akan mencari solusi j.a..