Bagaimana ini mungkin dan bagaimana saya menghadapinya? Saya membuat skrip cadangan yang bergantung pada Unix date
dan telah menemukan bug yang menarik:
[root@web000c zfs_test]# date +%y-%m-%d --date='2 months ago'
14-04-01
[root@web000c zfs_test]# date +%y-%m-%d --date='3 months ago'
14-02-28
[root@web000c zfs_test]# date
Sun Jun 1 00:08:50 CEST 2014
date
command-line-interface
Pelalaian
sumber
sumber
date
...Jawaban:
Anda melihat perilaku ini karena waktu musim panas (waktu musim panas).
Karena Anda saat ini berada di musim panas, di mana jam Anda lebih unggul satu jam, ketika Anda meminta tiga bulan yang lalu tepat setelah tengah malam pada tanggal 1 Juni, waktu berakhir menjadi satu jam "lebih awal" karena itu bukan waktu musim panas tiga bulan lalu.
Dokumentasi tanggal GNU menyarankan untuk mengatasinya dengan menggunakan 12:00 siang dan tanggal 15 bulan sebagai titik awal, ketika masing-masing meminta hari atau bulan relatif. Sebagai contoh:
sumber
[root@web000c zfs_test]# date +%y-%m-%d --date='3 months ago'
14-03-01
[root@web000c zfs_test]# date
Sun Jun 1 01:00:15 CEST 2014
date
penggunaan ini.Jika penetapan waktu absolut menjadi perhatian utama Anda, mungkin yang terbaik adalah mematikan UTC karena ada untuk tujuan itu. Jawaban Michael sangat berguna ketika Anda harus bekerja di dalam masalah, tetapi biasanya itu ide yang baik untuk menghindarinya sepenuhnya di mana Anda bisa.
Ketika sistem Anda tidak diatur ke UTC secara default, cara termudah untuk melewatkan zona waktu adalah dengan mengawali perintah Anda dengan
TZ
variabel lingkungan. Ini membatasi pergantian zona ke satu perintah dan menjaga variabel agar tidak bocor ke perintah berikutnya.Apa yang tidak boleh Anda lakukan adalah mengekspor
TZ
variabel karena hal ini dapat membuat masalah menjadi sangat membingungkan, seperti ditunjukkan berikut ini.sumber
Pada tahun ini komputer Anda berpikir sedang dioperasikan, dan pada tanggal tertentu Anda memilih untuk tes "1 bulan lalu, 2 bulan lalu, dan 3 bulan lalu, ya - kemungkinan deteksi 29 Februari. Tidak selalu kesalahan, tapi ..
Sekarang, hari ini BUKAN 2014-06-01. Coba lagi. Setel tanggal komputer ke 2013-06-01. Coba lagi.
Setel tanggal komputer ke 2014-09-01. Coba lagi.
sumber
MDY
format Amerika , silakan gunakan/
es untuk memisahkan. Lebih baik lagi, karena kami adalah komunitas internasional di sini, gunakan tanggal ISO yang tepat seperti2014-09-01
.