Tại sao một ngày từ những năm 1600 có thể?
Windows không lưu trữ dấu thời gian sửa đổi tệp như các hệ thống Unix làm . Theo Trung tâm Dev Windows (nhấn mạnh của tôi):
Thời gian tệp là một giá trị 64 bit đại diện cho số lượng khoảng thời gian 100 nano giây đã trôi qua kể từ 12:00 sáng ngày 1 tháng 1 năm 1601 Giờ quốc tế phối hợp (UTC). Hệ thống ghi lại thời gian tập tin khi các ứng dụng tạo, truy cập và ghi vào tập tin.
Vì vậy, bằng cách đặt giá trị sai ở đây, bạn có thể dễ dàng nhận được ngày từ 1600s.
Tất nhiên, một câu hỏi quan trọng khác là: giá trị này được đặt như thế nào? Ngày thực tế là gì? Tôi nghĩ rằng bạn sẽ không bao giờ có thể tìm ra, vì đó có thể chỉ đơn giản là một lỗi tính toán trong trình điều khiển hệ thống tệp. Một câu trả lời khác đưa ra giả thuyết rằng ngày thực sự là dấu thời gian Unix được hiểu là dấu thời gian của Windows, nhưng chúng thực sự được tính trên các khoảng thời gian khác nhau (giây so với nano giây).
Làm thế nào điều này liên quan đến vấn đề năm 2038?
Việc sử dụng loại dữ liệu 64 bit có nghĩa là Windows (nói chung) không bị ảnh hưởng bởi Vấn đề Năm 2038 mà các hệ thống Unix truyền thống gặp phải, do Unix ban đầu sử dụng số nguyên 32 bit, vượt quá số nguyên 64 bit mà Windows có. (Điều này bất chấp Unix hoạt động trên giây và Windows hoạt động trên micro / nano giây.)
Windows vẫn bị ảnh hưởng khi sử dụng các chương trình 32 bit được biên dịch với các phiên bản cũ của Visual Studio.
Các hệ điều hành Unix mới hơn đã mở rộng kiểu dữ liệu lên 64 bit, do đó tránh được sự cố. (Trên thực tế, vì các dấu thời gian Unix hoạt động trong vài giây, ngày kết thúc mới sẽ là 292 tỷ năm kể từ bây giờ.)
Ngày tối đa có thể được thiết lập là gì?
Đối với những người tò mò - đây là cách tính toán:
- Số lượng giá trị có thể có trong số nguyên 64 bit là 2 63 - 1 = 9223372036854775807 .
- Mỗi đánh dấu đại diện cho 100 nano giây, là 0,1 Đài hoặc 0,0000001 giây.
- Phạm vi thời gian tối đa sẽ là 9223372036854775807 0,0000001 s , vì vậy hàng trăm tỷ giây.
- Một giờ có 3600 giây, một ngày có 86400 giây và một năm có 365 ngày, do đó, có 86400 ⨉ 365 s = 31536000 s trong một năm. Tất nhiên, đây chỉ là một mức trung bình, bỏ qua các năm nhuận, giây nhuận hoặc bất kỳ thay đổi lịch nào mà chế độ hậu tận thế trong tương lai có thể ra lệnh cho các trái đất còn lại.
- 9223372036854775807 0,0000001 s / 31536000 s ≈ 29247 năm
@corsiKa
giải thích cách chúng ta có thể trừ đi các năm nhuận: 29247/365/4 20
- Vậy năm tối đa của bạn là 1601 + 29247 - 20 = 30828 .
Một số người thực sự đã cố gắng thiết lập điều này và đưa ra cùng một năm.