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.