$ date -d "Apr 1 2016 - 1 month" +%B
memberi saya "Maret", yang hebat - bulan yang datang sebelum April adalah Maret. Namun jika saya melakukan ini:
$ date -d "$(date -d "Apr 1 2016") - 1 month" +%B
itu memberi saya "Februari". Ini menyebabkan bug pada beberapa kode yang lebih kompleks yang saya miliki. Mengapa 2 perintah ini menunjukkan hasil yang berbeda?
March
Jawaban:
Anda dapat melihat masalahnya dengan menyalakan jejak shell:
Ketika Anda menggunakan output dari
date
perintah dalam , itu adalah di awal April, dan ketika mengurangi sebulan berjalan ke diskontinuitas karena perubahan EST / EDT:Hasil Anda, tentu saja, akan bervariasi sesuai dengan pengaturan zona waktu lokal Anda. Mengaktifkan jejak akan menampilkan zona waktu (dalam kasus saya,
EDT
).Alasan mengapa hasilnya berbeda adalah bahwa dalam kasus terakhir Anda telah memberikan lebih banyak informasi kepada
date
, menjadikan parameternya lebih spesifik , yaitu waktu waktu tertentu. Pada bagian pertama, itu tidak ditentukan, memberikandate
lebih banyak kelonggaran tentang bagaimana menentukan tanggal / waktu untuk ditampilkan.sumber
date -d "Apr 1 2016"; date -d "$(date -d "Apr 1 2016")"
saya mendapatkan hasil yang persis sama, termasuk tag zona waktu yang sama - mengapa menghapus satu bulan dari keduanya memberikan hasil yang berbeda?