ЧтениеСтатья в Википедии для HFS+, я заметил, что допустимый диапазон дат — с 1 января 1904 года по 6 февраля 2040 года. Аналогично,диапазон для NTFSэто 1 января 1601 г. – 28 мая 60056 г. По-моему, это смешно думать, так как я не могу вспомнить ни одного случая, когда файл должен был бы иметь дату изменения/создания, установленную в 1600-х или 1900-х годах. Я могу понять эпоху временных меток Unix, поскольку было бы разумно иметь файл, созданный/измененный в 70-х, 80-х годах и т. д., но просто кажется нелогичным устанавливать эпоху этих временных меток так далеко в прошлом.
решение1
Это касается не только NTFS; внутреннее время Windows осуществляется с использованием того же формата времени и с тем же началом эпохи.
Они знали, что им нужно 64-битное двоичное значение времени, потому что изначальное 32-битное значение Unix уже было известно как тупиковое (эти счетчики будут перенесены на 2038 год), а 64-битные значения времени уже использовались в VMS. 64 бита дают возможность подсчитать около 18 миллиардов миллиардов различных значений времени. Ну, на самом деле, только 9 миллиардов миллиардов, потому что значения времени с установленным старшим битом имеют другое значение в Windows (как и в VMS). Так что у нас действительно есть «только» 63 бита для подсчета даты и времени суток.
В то время как 32-битное время Unix считало только секунды, временные метки Windows отсчитываются с шагом в 100 наносекунд. Таким образом, значение времени 1 означает 100 нс после полуночи 1 января 1601 года.
Но почему выбрана такая «историческая» дата?
Ну, во-первых, это немного облегчает вычисления дня недели и тому подобные вычисления, поскольку это был первый год самого раннего 400-летнего цикла, включавшего электронные компьютеры любого рода. Есть некоторыеочень авторитетная поддержкапо этой причине.
Однако я вынужден предположить, что в контексте современных вычислений дополнительная вычислительная мощность, необходимая для того, чтобы справиться с другим начальным годом, будет довольно незначительной.
1 января 1601 года также является датой, от которой отсчитываются даты ANSI. Таким образом, «дата Windows» — это тот же номер дня, что и «дата ANSI», что немного упрощает ситуацию в разных местах.
Он также был стандартизирован как «год 1» григорианского календаря (хотя в то время этот календарь не был принят повсеместно).
Однако, по практическим, рабочим причинам, подумайте: этот формат даты/времени позволяет представлять исторические дату/время в, например, базах данных прямо рядом с современными, используя тот же формат. Генеалогическая база данных, например, может таким образом хранить даты рождения и смерти ваших предков, начиная с 400+ лет назад, что намного дольше, чем большинство таких записей существуют в надежной форме.
Не было бы смысла продлевать этот период раньше, начиная, скажем, с 1201 года или даже с 1 года, из-за перехода с юлианского на григорианский календарь, который начался в некоторых странах в 1582 году и продолжался вплоть до 1926 года, в зависимости от того, в какой стране вы находитесь. Все даты, записанные в формате времени ANSI и, соответственно, в «двоичном» формате времени Windows, считаются датированными по григорианскому календарю.
Кстати, VMS использует похожую схему, но ее базовое время — 17 ноября 1858 года. Это был стандарт, выбранный Смитсоновской астрофизической обсерваторией в качестве «базовой даты» для отслеживания спутников; это было связано с более ранним использованием астрономами оригинальной схемы юлианских дней, которая отсчитывает дни с полудня 1 января 4713 года до нашей эры. По этой схеме 17 ноября 1858 года соответствует модифицированному юлианскому дню номер 2 400 000. Используя MJD вместо JD, они смогли втиснуть современные даты всего в 18 бит, что было важным достижением в то время. См.Эта статьяПодробности можно узнать в компании VMS Engineering.
решение2
Если рассматривать его изолированно, широкий диапазон временных меток NTFS может показаться нелогичным. Но если посмотреть на общую картину, то он полностью логичен.
Одна из вещей, которую делает операционная система, — это предоставление набора функций, которые понадобятся большинству программ. Это позволяет программистам сосредоточиться на своих программах, а не тратить время на переписывание этих общих функций для каждой программы. Любая операционная система, которая не предоставляет эти функции, вряд ли будет успешной. Windows и Linux предоставляют сотни таких функций.
Windows включает ряд функций для представления и работы с датами и временем. Для максимальной полезности это охватывает настолько широкий диапазон дат, насколько это возможно. Многие программы используют эти функции для самых разных целей.
Файловая система NTFS была выпущена как часть платформы NT. Как и любая современная файловая система, она нуждалась в каком-то способе хранения отметок даты файла. Логично, что дизайнеры решили использовать ту же систему, что и предоставленная приложениям. Это упрощает работу разработчиков. Конечно, диапазон дат намного шире, чем необходимо для отметок даты, но это ничего не стоит и не вызывает никаких проблем. Использование другой системы с более ограниченным диапазоном дат для отметок даты было бы нелогичным.
решение3
Даты (и спецификация их формата на уровне битов) используются не только для маркировки файлов, но и для вычислений и во многих других местах. Например, историку могут понадобиться даты 17-го или 18-го века в его столбцах Excel; или астроному — для расчета планетарных выравниваний в эти периоды.
Даже если количество людей, которые им пользуются, невелико, потеря незначительна — неважно, сможете ли вы использовать этот формат 100, 5000 или 60 000 лет; он, скорее всего, не выживет и в течение следующих 50 лет.