Как может файл был 'создан' в 1641?

Несколько лет назад я наткнулся на этот файл на наш сервер.

И мне интересно, как может файл это сказать'был создан в 1641? Насколько я знаю, время на ПК определяется количество секунд с 1 января 1970 года. Если это показатель его убить, вы можете сделать 31 декабря 1969 г. (индекс, вероятно, говорит -1), но я'м не знаю, это, казалось бы, произвольную дату, которая предшествует даже на основателей Соединенных Штатов Америки.

Так как файл может быть датировано 1641?

ЗЫ: даты по-французски. Фévrier-февраль.

Комментарии к вопросу (8)
Решение

Почему свидание с 1600-х возможных?

Windows не хранит изменения файла, метки времени как сделать UNIX-систем. Согласно [Центр разработчиков Windows][2] (выделено мной):

файл-это 64-разрядное значение, представляющее количество 100-наносекундных интервалов, прошедших с 12:00 утра 1 января, 1601 всемирное координированное время (UTC). Система записывает файлы, когда приложения создавать, получать доступ и запись в файлы.

Таким образом, установив неправильное значение, можно легко получить датируется 1600-х годов.

Конечно, еще один важный вопрос: как это значение? Какова фактическая дата? Я думаю, что вы'll никогда не быть в состоянии выяснить, как это может быть просто ошибка расчета в драйвере файловой системы. Другой ответ предполагает, что дата на самом деле является метка времени Unix интерпретируется как метка для Windows, но они'вновь действительно рассчитаны на разные промежутки времени (в секундах и наносекундах).

Как это связано с Проблема 2038?

Использование 64-разрядный тип данных означает, что Windows (как правило) не влияет год 2038 Проблема, что традиционные UNIX-систем, так как ОС UNIX изначально использовали 32-битное целое число, которое переполняется раньше, чем 64-битное целое, что Windows не имеет. (И это несмотря на операционных Unix на секунды и ОС Windows по микро-и наносекунд.)

Окна влияют при использовании 32-битных программ, которые были составлены при старых версиях Visual студии, конечно.

Более новых операционных системах Unix уже расширили тип данных в 64 бит, тем самым избегая проблему. (В самом деле, начиная с меток времени Unix работать в секундах, новый закрученными дата будет 292 миллиардов лет.)

Какова максимальная дата, которую можно установить?

Для любознательных – здесь's, Как посчитать, что:

  • Числа возможных значений в 64-разрядное целое число являются 2<суп>63</с SUP> У – 1 = 9223372036854775807.
  • Каждый такт соответствует 100 наносекунд, что на 0,1 µS или 0.0000001 сек.
  • Максимальный диапазон времени будет ⨉ 9223372036854775807 0.0000001 сек, так что сотни миллиардов секунд.
  • Один час 3600 секунд, один день 86400 секунд, и один год имеет 365 дней, так что есть 86400 ⨉ х 365 = 31536000 сек в год. Это, конечно, только в среднем, игнорируя високосные годы, високосные секунды, или любые изменения в календаре, что будущие режимы постапокалиптическом может диктовать на остальных землян.
  • 9223372036854775807 ⨉ 0.0000001 с / 31536000 сек ≈ 29247 лет
  • @corsiKa объясняет, как мы можем убрать високосные годы: 29247 / 365 / 4 ≈ 20
  • Так что ваш максимум год 1601 + 29247 – 20 = 30828.

Некоторые люди на самом деле пытался установить этот и придумал один и тот же год.

[2]: https://msdn.microsoft.com/en-us/library/windows/desktop/ms724290(В=и 85).аспн

Комментарии (6)

Если вы Don'т чувствовать себя слишком плохо о какой-то догадки, позвольте мне предложить объяснение. И я Дон'т имею в виду "у кого-то установите значение в бред" и, что'ы, очевидно, всегда возможно :)

Unix время обычно используется количество секунд с 1970 года. Окна, с другой стороны, использует 1601 в качестве отправной год. Итак, если мы предположим (и это'ы большой предположение!) что проблема заключается в неправильном преобразования в два раза, можно предположить, что даты, которые должны быть представлены фактически в <удар>когда-то в 2011 году (1970 + 41), который был неправильно преобразованы в 1640 (1601 + 41)</удара>. Редактировать: на самом деле, я сделал ошибку в Windows, начиная года. Это's возможно, что фактическое время создания в 2010 году, или это была другая ошибка (на одну ошибки встречаются довольно часто в программное обеспечение :г).

Учитывая, что в этом году случается еще одна из дат отслеживания, связанный с файлом в вопрос, я думаю, это's довольно правдоподобное объяснение :)

Комментарии (12)

Как уже было написано другими, [эпоха Windows находится в 1601-01-01 00:00][эпохи].

Количество секунд между этой эпохой и filetime и отображается, [это 1.266.705.294][для Windows]. Если добавить, что в эпохи Unix, то прибудете в 2010-02-20 23:34:54 мск, суббота. Это примерно за год до даты последнего доступа, что делает его немного правдоподобно. Так это может быть метка времени Unix, толковать неправильно эпохи.

Комментарии (1)

Как обычно для этих типов вопросов, Рэймонд Чен's блоге есть ответ относительно этого [от "Почему это с Win32 эпохи 1 января 1601 года?&и" запись от 6 марта 2009 года,:] (https://blogs.msdn.microsoft.com/oldnewthing/20090306-00/?p=18913/)

и GT; `filetime и структура записей в форме 100-наносекундных

интервалов с 1 января 1601 года. Почему выбран этот день?

Григорианский календарь работает на 400-летний цикл, и 1601 является В первый год цикла, которая была активна во время Windows NT была проектируется. Другими словами, он был выбран, чтобы сделать математику приятно.

У меня на самом деле есть письмо от Дэйва Катлера, подтверждающие это.

Комментарии (0)