Да, у римлян тоже были проблемы с нулём.
Это просто [неинтуитивное] следствие математики (являющейся сильным компонентом программирования, особенно раннего программирования), определяющей ноль как первый (проблемный термин, что один) реальный, положительный strike>* натуральное число, а поскольку массив индексируется реальными натуральными числами, «первый» элемент имеет индекс 0.
Месяцы - это действительно именованные значения в массиве, где дни и годы - пронумерованные значения - возможно, было бы полезнее думать о днях/годах как о массивах, которые выглядят как { "1", "2", "3", . .. } сами себя.
Что касается того, почему это так распространено (кроме того, что это математически правильно), то все перечисленные вами языки происходят от общего происхождения с одной стороны...
Редактировать:
Подробнее об этом можно узнать по ссылке Википедии, в которой подробно описаны несколько хороших и интересные причины для нулевой индексации (что напрямую не говорит о том, почему месяцы индексируются с нулевой индексацией, но я думаю, что это уже рассмотрено), и это SO ответила на вопрос ранее.
Похоже, преобладающее мнение — это либо «историческая случайность», либо «потому что месяцы — это не числа, поэтому их нельзя сравнивать с хранением дней/годов», в зависимости от того, кого вы спросите.
* Извините, извините, физика! = математика возвращается, чтобы укусить меня там. Пойду гладить руки.
person
annakata
schedule
21.09.2009
java.time.Month
Имеет вменяемый подсчет, 1-12 за январь-декабрь. - person Basil Bourque   schedule 01.09.2019