`Cal` сломан? Что случилось в сентябре 1752 года?

28

Если вы посмотрите на вывод, cal 9 1752вы увидите этот странный вывод:

   September 1752
 S  M Tu  W Th  F  S
       1  2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Следующая история под названием « Cal 9 1752 объяснил» »была скопирована из списка новостей в начале 90-х годов и заархивирована в« Коллекции забавных вещей для компьютерной аудитории »Дэвидом Г. Уайзманом (сетевой менеджер на факультете компьютерных наук в университете. Западного Онтарио).

У парня, который первоначально написал команду "cal" на каком-то старом компьютере Версии 7, была ошибка в коде. Это выглядело как некоторый ошибочный вывод, когда переменная malloc перезаписала 12 дополнительных байтов с нулями, что привело к странному выводу календаря, показанному выше.

Никто в здравом уме на самом деле не заботится о календаре на сентябрь 1752 года. Даже идея 1752 года не существует в UNIX, потому что время для UNIX не начиналось до начала 1970 года. В результате никто даже не знал, что была эта ошибка намного позже. К тому времени вокруг были плавающие тысячи копий, многие из которых были только двоичными. Было слишком поздно, чтобы исправить их все.

Поэтому в середине 1975 года некоторые высокопоставленные чиновники AT & T встретились с Папой и пришли к соглашению. Календарь был задним числом изменен, чтобы привести сентябрь 1752 года в соответствие с реальностью UNIX. Поскольку календарь был изменен путем обратного отсчета с 14 сентября 1752 года, ни одна из дат после этого не была затронута. Все даты до этого были перенесены на 12 дней. Они также исправили man-страницу для «cal», чтобы документировать ошибку как функцию.

11 дней с 3 по 13 сентября просто исчезли из записей. Они обыскали учебники истории и обнаружили, что, к счастью, за эти 11 дней ничего особенного не произошло.

В целом, весь этот инцидент был в значительной степени не событием. Один из авторов научной фантастики позже услышал об этом и превратил эту штуку в полнометражную научно-фантастическую работу под названием «Токарный станок небес», книгу, которая, на мой взгляд, мало похожа на то, что действительно произошло.

Каково реальное объяснение выходной аномалии?

LanceBaynes
источник
14
Разве вы не видите /humorкаталог в размещенном вами URL? ;)
Алекс
1
Эта ссылка заставила меня посмеяться.
jw013
1
... что опять не так с выводом? : p
d33tah
Григорианский календарь с прогностическими показателями кажется более разумным, в противном случае вам нужно знать страну, религию и т. Д., Чтобы определить календарь с некоторой точностью.
JFS
1
Даже идея 1752 года не существует в UNIX ... ... но была ли идея UNIX в 1752 году?
Алоис Махдал

Ответы:

49

Чтобы отследить реальную историю, попробуйте запустить man calсебя:

The Gregorian Reformation is assumed to have occurred in 1752 on the 3rd
of September.  By this time, most countries had recognized the reforma-
tion (although a few did not recognize it until the early 1900’s.)  Ten
days following that date were eliminated by the reformation, so the cal-
endar for that month is a bit unusual.

Затем, если ваша история отрывочна, перейдите в Википедию за информацией об изменениях, внесенных григорианским календарем, и его истории усыновления в различных частях мира:

Реформа григорианского календаря состояла из двух частей: реформы юлианского календаря, использовавшейся до времени папы Григория, вместе с реформой лунного цикла, использованного Церковью, наряду с юлианским календарем для расчета дат Пасхи.
[...]
Помимо изменения средней продолжительности календарного года с 365,25 дней (365 дней 6 часов) до 365,2425 дней (365 дней 5 часов 49 минут 12 секунд), сокращение на 10 минут 48 секунд в год реформа григорианского календаря также касалась накопленной в прошлом разницы между этими длинами.
[...]
Однако из-за протестантской реформации многие западноевропейские страны изначально не следовали григорианской реформе и сохранили свои системы старого образца. В конце концов, другие страны последовали за реформой ради последовательности, но к тому времени, когда последние приверженцы юлианского календаря в Восточной Европе (Россия и Греция) перешли на григорианскую систему в 20-м веке, им пришлось отказаться от своих календарей на 13 дней. , из-за дополнительной накопленной разницы между двумя календарями с 1582 года .
[...]
Великобритания и Британская империя (включая восточную часть того, что сейчас является Соединенными Штатами) приняли григорианский календарь в 1752 году, к этому времени необходимо было исправить на 11 дней. В среду, 2 сентября 1752 года, последовал четверг, 14 сентября 1752 года.

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

Если у вас когда-нибудь будет причина подсчитывать даты, уходящие так далеко в вашем программном обеспечении, вы столкнетесь с гораздо более серьезными проблемами, чем просто один сброс! История календаря полна сюрпризов!

Калеб
источник
3
Отличный ответ! Чтобы сделать вещи еще более сложными, некоторые греческие монашеские общества до сих пор используют юлианский календарь сегодня.
Terdon
1
«Точное время для внесения этой коррекции несколько произвольно», - это упрощенно. Более точная версия была бы такова, что «потребуется хотя бы местоположение пользователя, чтобы распознать дату (и), в которые произошло исправление». (У шведа, например, был амбициозный план
размазать
4

Вот хорошая статья о календарях (PDF), которая объясняет, как медленное смещение Пасхи в течение года сделало эту корректировку необходимой, а также описывает, когда разные страны сделали это.

На странице 904:

Он [Папа Григорий] также исправил накопившуюся 10-дневную ошибку в календаре, объявив, что за четвергом, 4 октября 1582 года, последней датой в старом стиле (юлианским календарем), последует пятница, 15 октября 1582 года н.э. первый день нового стиля (григорианский) календарь. Католические страны следовали этому правилу, но протестантские страны оказали сопротивление: Испания, Португалия и Италия немедленно приняли его, как и католические государства в Германии Протестантские части Германии ждали до 1700 года, чтобы принять его. Великобритания и ее колонии (включая Соединенные Штаты ) ждали до 1752 года , Россия продержалась до революции 1918 года, а Болгария - до 1920 года.

Документ продолжает ссылаться на обширный список дат усыновления, который был составлен астрономами, и прямо объясняет, как конвертировать между различными календарными системами.

whoplisp
источник