1600'lerden bir tarih neden mümkün olabilir?
Windows, Unix sistemleri gibi dosya değiştirme zaman damgalarını saklamaz . Göre , Windows Dev Center (vurgu benim):
Bir dosya süresi, 1 Ocak 1601, 1601 Koordineli Evrensel Saat (UTC) 'den beri geçen 100 nanosaniye aralıkların sayısını temsil eden 64 bitlik bir değerdir . Sistem, uygulama oluştururken, erişirken ve dosyalara yazarken dosya zamanlarını kaydeder.
Yani, burada yanlış bir değer ayarlayarak, 1600'lerden kolayca tarih alabilirsiniz.
Tabii ki, bir başka önemli soru şudur: Bu değer nasıl ayarlandı? Gerçek tarih nedir? Dosya sistemi sürücüsünde bir hesaplama hatası olabileceğinden, asla öğrenemeyeceğinizi düşünüyorum. Başka bir cevap , tarihin aslında Windows zaman damgası olarak yorumlanan bir Unix zaman damgası olduğunu, ancak gerçekte farklı aralıklarla (saniye ve nanosaniye) hesaplandığını varsayıyor.
Bunun 2038 Yılı problemi ile ilgisi nedir?
64 bit veri türünün kullanılması, Windows'un (genel olarak), geleneksel Unix sistemlerinin sahip olduğu 2038 Yılı Sorunu'ndan etkilenmediği anlamına gelir; çünkü Unix başlangıçta, Windows’un 64 bit tamsayısından daha erken dolup taşan bir 32 bit tam sayı kullanmıştır. vardır. (Bu, Unix'in saniyede çalışmasına ve mikro / nanosaniyede çalışan Windows'un olmasına rağmen.)
Tabii ki Visual Studio'nun eski sürümleriyle derlenmiş 32 bit programlar kullanılırken Windows hala etkilenir .
Daha yeni Unix işletim sistemleri zaten veri tipini 64 bite genişletti , bu nedenle sorundan kaçınıldı. (Aslında, Unix zaman damgaları saniyeler içinde çalıştığından, yeni sarma tarihi bundan 292 milyar yıl olacak.)
Ayarlanabilecek maksimum tarih nedir?
Meraklı olanlar için - işte bunu nasıl hesaplayacağınız:
- Bir 64-bit tamsayı olası değerlerin sayısı olan 2 63 1 = 9223372036854775807 - .
- Her bir kene, 0.1 µs veya 0.0000001 s olan 100 nanosaniyeyi temsil eder.
- Maksimum zaman aralığı 9223372036854775807 ⨉ 0,0000001 s , yani yüzlerce milyar saniye olacaktır.
- Bir saat 3600 saniyeye, bir gün 86400 saniyeye ve bir yıl 365 güne sahip, bu nedenle yılda 86400 ⨉ 365 s = 31536000 s . Bu, elbette, yalnızca ortalama olarak, artık yılları, artık saniyeleri ya da gelecekteki postapokalipik rejimlerin kalan topraklarda dikte edebileceği herhangi bir takvim değişikliğini yok sayar.
- 9223372036854775807 ⨉ 0.0000001 s / 31536000 s ≈ 29247 yıl
@corsiKa
artık yılları nasıl çıkarabileceğimizi açıklıyor: 29247/365/4 ≈ 20
- Yani, maksimum yılınız 1601 + 29247 - 20 = 30828 .
Bazı insanlar aslında bunu ayarlamaya çalıştı ve aynı yıl ile geldi.