Mengapa tanggal dari tahun 1600-an dimungkinkan?
Windows tidak menyimpan cap waktu modifikasi file seperti yang dilakukan sistem Unix . Menurut Windows Dev Center (penekanan saya):
Waktu file adalah nilai 64-bit yang mewakili jumlah interval 100 nanodetik yang telah berlalu sejak 12:00 AM 1 Januari 1601 Coordinated Universal Time (UTC). Sistem mencatat waktu file saat aplikasi membuat, mengakses, dan menulis ke file.
Jadi, dengan menetapkan nilai yang salah di sini, Anda dapat dengan mudah mendapatkan tanggal dari tahun 1600-an.
Tentu saja, pertanyaan penting lainnya adalah: bagaimana nilai ini ditetapkan? Tanggal berapa sebenarnya? Saya pikir Anda tidak akan pernah bisa mengetahuinya, karena itu bisa saja kesalahan perhitungan dalam driver sistem file. Jawaban lain berhipotesis bahwa tanggal itu sebenarnya cap waktu Unix diartikan sebagai cap waktu Windows, tetapi mereka sebenarnya dihitung pada interval yang berbeda (detik vs nanodetik).
Bagaimana hubungannya dengan masalah Tahun 2038?
Penggunaan tipe data 64-bit berarti bahwa Windows (umumnya) tidak terpengaruh oleh Masalah Tahun 2038 yang dimiliki sistem Unix tradisional, karena Unix awalnya menggunakan integer 32-bit, yang meluap lebih cepat daripada integer 64-bit yang dimiliki Windows telah. (Ini meskipun Unix beroperasi pada detik dan Windows beroperasi pada mikro / nanodetik.)
Windows masih terpengaruh ketika menggunakan program 32-bit yang dikompilasi dengan versi lama dari Visual Studio, tentu saja.
Sistem operasi Unix yang lebih baru telah memperluas tipe data menjadi 64 bit, sehingga menghindari masalah. (Faktanya, sejak cap waktu Unix beroperasi dalam hitungan detik, tanggal sampul baru akan menjadi 292 miliar tahun dari sekarang.)
Berapa tanggal maksimum yang bisa ditetapkan?
Untuk yang penasaran - inilah cara menghitungnya:
- The jumlah kemungkinan nilai dalam integer 64-bit adalah 2 63 - 1 = 9223372036854775807 .
- Setiap centang mewakili 100 nanodetik, yaitu 0,1 μs atau 0,0000001 dtk.
- Rentang waktu maksimum adalah 9223372036854775807 ⨉ 0,0000001 s , jadi ratusan miliar detik.
- Satu jam memiliki 3600 detik, satu hari memiliki 86400 detik, dan satu tahun memiliki 365 hari, jadi ada 86400 ⨉ 365 s = 31536000 d dalam setahun. Ini, tentu saja, hanya rata-rata, mengabaikan tahun kabisat, detik kabisat, atau perubahan kalender apa pun yang mungkin diperintahkan oleh rezim postapocalyptic di masa depan terhadap penduduk dunia yang tersisa.
- 9223372036854775807 ⨉ 0,0000001 s / 31536000 s ≈ 29247 tahun
@corsiKa
menjelaskan bagaimana kita dapat mengurangi tahun kabisat: 29247/365/4 ≈ 20
- Jadi tahun maksimum Anda adalah 1601 + 29247 - 20 = 30828 .
Beberapa orang sebenarnya telah mencoba untuk mengatur ini dan muncul pada tahun yang sama.