Semua pertanyaan lain pada jaringan SE berurusan dengan skenario di mana salah satu tanggal diasumsikan now
( Q ) atau di mana hanya tanggal yang ditentukan ( Q ).
Yang ingin saya lakukan adalah memberikan tanggal dan waktu, lalu kurangi waktu dari itu.
Inilah yang saya coba pertama kali:
date -d "2018-12-10 00:00:00 - 5 hours - 20 minutes - 5 seconds"
Ini menghasilkan 2018-12-10 06:39:55
- Ini menambahkan 7 jam. Kemudian kurangi 20:05 menit.
Setelah membaca man
dan info
halaman date
, saya pikir saya sudah memperbaikinya dengan ini:
date -d "2018-12-10T00:00:00 - 5 hours - 20 minutes - 5 seconds"
Tapi hasilnya sama. Dari mana bahkan mendapat 7 jam dari?
Saya mencoba kencan lain juga karena saya pikir mungkin kami memiliki 7200 detik kabisat pada hari itu, siapa tahu lol. Namun hasilnya sama.
Beberapa contoh lagi:
$ date -d "2018-12-16T00:00:00 - 24 hours" +%Y-%m-%d_%H:%M:%S
2018-12-17_02:00:00
$ date -d "2019-01-19T05:00:00 - 2 hours - 5 minutes" +%Y-%m-%d_%H:%M:%S
2019-01-19_08:55:00
Tapi di sini menjadi menarik. Jika saya menghilangkan waktu pada input, itu berfungsi dengan baik:
$ date -d "2018-12-16 - 24 hours" +%Y-%m-%d_%H:%M:%S
2018-12-15_00:00:00
$ date -d "2019-01-19 - 2 hours - 5 minutes" +%Y-%m-%d_%H:%M:%S
2019-01-18_21:55:00
$ date --version
date (GNU coreutils) 8.30
Apa yang saya lewatkan?
Pembaruan: Saya telah menambahkan Z
di akhir, dan itu mengubah perilaku:
$ date -d "2019-01-19T05:00:00Z - 2 hours" +%Y-%m-%d_%H:%M:%S
2019-01-19_04:00:00
Saya masih bingung. Tidak banyak tentang ini di halaman info GNU tentang tanggal.
Saya menduga ini adalah masalah zona waktu, tetapi mengutip The Calendar Wiki pada ISO 8601 :
Jika tidak ada informasi hubungan UTC diberikan dengan representasi waktu, waktu diasumsikan dalam waktu lokal.
Itulah yang saya inginkan. Waktu lokal saya diatur dengan benar juga. Saya tidak yakin mengapa kencan akan mengacaukan zona waktu sama sekali dalam kasus sederhana ini tentang saya menyediakan suatu waktu dan ingin mengurangi sesuatu darinya. Bukankah seharusnya mengurangi jam dari string tanggal terlebih dahulu? Bahkan jika itu mengubahnya menjadi kencan pertama dan kemudian melakukan pengurangan, jika saya meninggalkan pengurangan saya mendapatkan apa yang saya inginkan:
$ date -d "2019-01-19T05:00:00" +%Y-%m-%d_%H:%M:%S
2019-01-19_05:00:00
Jadi JIKA ini benar-benar masalah zona waktu, dari mana datangnya kegilaan itu?