Saya bermain-main dengan date
untuk mencoba mengonversi ekspresi seperti “2 jam” menjadi beberapa detik seperti 7200. Saya pikir saya bisa melakukan ini dengan permintaan seperti:
date -d "1970-01-01 00:00:00 + 2 hours" +"%s"
Namun, saya melihat hasil yang sangat aneh saat melakukannya. (/etc/timezone
saya berisi "Eropa/Paris", maka penggunaan TZ
untuk memaksa waktu UTC.)
omega:~$ TZ=utc date -d "1970-01-01 00:00:00" +"%s"
0
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 0 minutes" +"%s"
60
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + -1 minutes" +"%s"
3660
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 1 minutes" +"%s"
-3540
Hasil pertama cukup masuk akal, tetapi saya benar-benar bingung tentang bagaimana date
mungkin datang dengan tiga hasil terakhir. Adakah yang mengerti logika di antara hasil-hasil itu?
Jawaban yang Diterima:
Saya pikir itu mengambil + x
Anda sebagai penentu zona waktu (mis., pertimbangkan 2013-04-25 19:52:36 +4
adalah stempel waktu yang valid, dalam zona waktu 4 jam lebih cepat dari UTC).
Itu kemudian melihat kata 'menit', dan memperlakukannya sebagai sinonim dari menit, jadi memberi Anda satu menit kemudian.
Jika Anda memasukkan penentu zona waktu eksplisit, itu berfungsi:
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC" +"%s"
0
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 0 minutes" +"%s"
0
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + -1 minutes" +"%s"
-60
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 1 minutes" +"%s"
60
Perhatikan UTC
setelah kolom detik. Anda juga dapat memasukkan +0
kedua :
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 +0 + -1 minutes" +"%s"
-60
… tapi setidaknya secara pribadi, itu jauh lebih sulit untuk dibaca.
Atau Anda dapat menempatkan Z
setelah detik, dll. Anda sebenarnya tidak memerlukan TZ
variabel lingkungan yang akan disetel ke UTC dalam contoh di atas.