почему возможна дата 1600-х годов?
Windows не хранит изменения файла, метки как делают системы Unix. Согласно Центр Разработки Windows (выделено мной):
время файла-это 64-разрядное значение, представляющее число 100 наносекунд интервалы, прошедшие с 12:00 1 января 1601 всемирное координированное время (UTC). Система записывает время создания файлов приложениями, доступ и запись в файлы.
таким образом, установив неправильное значение здесь, вы можете легко получить даты из 1600-х годов.
конечно, еще один важный вопрос: как это значение? Какова фактическая дата? Я думаю, что вы никогда не сможете узнать, как это могло бы быть просто ошибка расчета в драйвере файловой системы. другой ответ предполагает что дата на самом деле является меткой времени Unix, интерпретируемой как метка времени Windows, но они фактически рассчитано на разных интервалах (секунды против наносекунд).
как это относится к проблеме 2038 года?
использование 64-разрядного типа данных означает, что Windows (как правило) не зависит от Год 2038 Задача, что традиционные системы Unix, так как Unix изначально используется 32-разрядное целое число, которое переполняется раньше, чем 64-разрядное целое число, что Windows имеет. (Это несмотря на Unix работает на секундах и Windows, работающих на микро-и наносекунд.)
Windows по-прежнему страдает при использовании 32-битных программ, скомпилированных со старыми версиями Visual Studio, конечно.
новые операционные системы Unix уже расширен тип данных до 64 бит, что позволяет избежать эту проблему. (Фактически, поскольку временные метки Unix работают в секундах,новая дата обертывания будет 292 миллиарда лет.)
какова максимальная дата, которая может быть установить?
для любопытных - вот как это вычислить:
- на количество возможных значений в 64-битном целочисленном are 263 – 1 = 9223372036854775807.
- каждый тик представляет 100 наносекунд, что составляет 0,1 МКС или 0,0000001 С.
- максимальный диапазон времени будет 9223372036854775807 ⨉ 0.0000001 s, так сотни миллиардов секунд.
- один час 3600 секунд, один день имеет 86400 секунд, и один год имеет 365 дней, настолько там 86400 ⨉ 365 s = 31536000 s в год. Это, конечно, только среднее значение, игнорируя високосные годы, високосные секунды или любые календарные изменения, которые будущие постапокалиптические режимы могут диктовать оставшимся землянам.
- 9223372036854775807 ⨉ 0.0000001 s / 31536000 s ≈ 29247 лет
@corsiKa
объясняет, как мы можем убрать високосные годы: 29247 / 365 / 4 ≈ 20
- так что ваш максимальный год 1601 + 29247 – 20 = 30828.
некоторые люди на самом деле пытался установить этот и придумали в том же году.