Почему диапазоны дат в вычислениях начинаются в древние периоды?

483
svbnet

Читая статью в Википедии для HFS +, я заметил, что допустимый диапазон дат - 1 января 1904 г. - 6 февраля 2040 г. Аналогичным образом диапазон для NTFS - 1 января 1601 г. - 28 мая 60056 г. На мой взгляд, это смешно Я не могу вспомнить ни одного случая, когда файл должен иметь измененную / созданную дату, установленную в 1600-х или 1900-х годах. Я могу понять эпоху меток времени Unix, так как было бы разумно создать / изменить файл в 70-х, 80-х и т. Д., Но просто нелогично, чтобы эпоха этих временных меток была установлена ​​еще в прошлом.

-1
http://stackoverflow.com/questions/10849717/what-is-the-significance-of-january-1-1601 Polygnome 7 лет назад 4
Это связано с 400-летним циклом для високосных интервалов и модульной арифметикой, включенной в математические окружающие високосные циклы. Это начало первого такого периода, когда появились цифровые файлы. Frank Thomas 7 лет назад 2
Примечательно, что ANSI приняла эту же дату для своих марок, поэтому она используется в COBOL и других спецификациях языка ANSI. По сути, это значительно упрощает математику необработанных значений, если вы можете ограничить количество рекурсий с точки зрения циклов корректировки времени, установив базу, от которой мы не слишком дрейфовали (в общей схеме вещи). Если вы когда-либо пытались написать код для вычисления даты Пасхального воскресенья, вы заметите, что чем дальше вы идете вперед или назад, тем длиннее и сложнее становится требуемая формула. Frank Thomas 7 лет назад 0

3 ответа на вопрос

2
Jamie Hanrahan

Это не просто 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.

1
Aganju

Даты (и спецификация их формата на битовом уровне) используются не только для маркировки файлов, но также для расчета и во многих других местах. Например, историк может захотеть, чтобы в его колонках Excel были даты 17 или 18 века; или астроном рассчитать планетарные выравнивания в эти периоды.

Даже если количество людей, пользующихся им, невелико, потеря небрежна - не имеет большого значения, можете ли вы использовать этот формат в течение 100, 5000 или 60000 лет; это вероятно не выживет следующие 50 лет.

"это, вероятно, не выживет следующие 20 лет". Это немного пессимистично. Почему ты веришь в это? DavidPostill 7 лет назад 0
Не потому, что это плохо или что-то в этом роде, а в лучшем случае; если вы посмотрите на текущую скорость увеличения размера, терабайты будут нормальным размером для файлов через 20 лет. Я готов изменить его на 50, моя точка зрения не была тысячи лет Aganju 7 лет назад 0
@arganju, я думаю, ты недооцениваешь количество COBOL, которое все еще работает на мэйнфреймах. Кроме того, обратите внимание, что для программ высокого уровня, таких как Excel, они могут свободно применять любой формат поддержки и представления данных, который им нравится для дат, поэтому тема на самом деле имеет мало общего с программами пользовательского уровня, но вместо этого с механикой низкого уровня файловой системы; вещи, которые находятся на грани между программным и аппаратным обеспечением. На этом уровне много теории чисел; Многие очень умные люди потратили годы на разработку чрезвычайно эффективных и умных алгоритмов. Frank Thomas 7 лет назад 0
И формат / соглашение о хранении лет в виде двузначных целых чисел, вероятно, не доживет после 1990 года ... о, подождите ... :-) ⁠ G-Man 6 лет назад 0
1
LMiller7

При отдельном рассмотрении широкий диапазон временных отметок NTFS может показаться нелогичным. Но когда вы смотрите на общую картину, это совершенно логично.

Одна из вещей, которую делает операционная система, - это набор функций, которые понадобятся большинству программ. Это позволяет программистам сосредоточиться на своих программах вместо того, чтобы тратить время на переписывание этих общих функций для каждой программы. Любая операционная система, которая не обеспечивает эти функции, вряд ли будет успешной. Windows и Linux предоставляют сотни таких функций.

Windows включает в себя ряд функций для представления и работы с датами и временем. Для максимальной полезности это охватывает как можно более широкий диапазон дат. Многие программы используют эти функции для самых разных целей.

Файловая система NTFS была выпущена как часть платформы NT. Как и любой современной файловой системе, ей нужен был какой-то способ хранения файловых отметок даты. Логически дизайнеры решили использовать ту же систему, что и для приложений. Это делает вещи проще для разработчиков. Конечно, диапазон дат намного шире, чем необходимо для штампов с датами, но это ничего не стоит и не вызывает проблем. Использование другой системы с более ограниченным диапазоном дат для отметок даты было бы нелогичным.