Почему Excel одновременно распознаёт и не распознаёт дату 29 февраля 1900 года?

Под вопросом о некорректном представлении чисел в Excel такой комментарий:

... Например, 1/3/1900 - это 3 (тройка) в формате даты ...

Сначала это утверждение меня смутило. Под рукой - только LibreOffice, который отображает 3 в формате даты как 1/2/1900, т.е. второе января 1900 года. Но проверка в онлайн Office 365 подтвердила, что Excel действительно отображает число 3 как третье января 1900 года.

Пройдясь по датам, я обнаружил, что этот сдвиг обусловлен тем, что Excel распознаёт дату 29 февраля 1900 года, которой соответствует число 60. Вместе с тем, при выборе даты в выпадающем меню она отображается как первое марта 1900 года, а 29 февраля там нет, что согласуется с Григорианским календарём.

Чем обусловлена эта несостыковка?

скрин из Office 365


Ответы (1 шт):

Автор решения: Dev18

Таки да, это старая ошибка, которую оказалось тяжело исправить. – Vitalizzare

Документация

Когда Lotus 1-2-3 впервые вышел, программа считала, что 1900 год был високосным, хотя на самом деле это не так. Это упрощало обработку високосных лет и почти ни на что не влияло в большинстве вычислений дат в Lotus 1-2-3.

Когда были выпущены Microsoft Multiplan и Microsoft Excel, они тоже стали считать 1900 год високосным. Это допущение позволило Microsoft Multiplan и Microsoft Excel использовать ту же систему серийных дат, что и Lotus 1-2-3, и обеспечивать лучшую совместимость с Lotus 1-2-3. Рассмотрение 1900 года как високосного также облегчало пользователям перенос рабочих листов из одной программы в другую.

Хотя технически возможно исправить это поведение, чтобы современные версии Microsoft Excel не считали 1900 год високосным, недостатки такого изменения перевешивают преимущества.

Если бы это поведение было исправлено, возникнет множество проблем, в том числе:

  • Почти все даты в текущих листах Microsoft Excel и других документах будут уменьшаться на один день. Исправление этой смены займет значительное время и усилия, особенно в формулах, использующих даты.
  • Некоторые функции, такие как функция WEEKDAY, возвращают разные значения; Это может привести к неправильной работе формул в листах.
  • Исправление этого поведения приведет к разрыву совместимости последовательной даты между Microsoft Excel и другими программами, используюющими даты.

Если поведение остается некорректным, возникает только одна проблема:

  • Функция WEEKDAY возвращает неверные значения для дат до 1 марта 1900 года. Так как большинство пользователей не используют даты до 1 марта 1900 года, эта проблема является редкой.

ПРИМЕЧАНИЕ. Microsoft Excel правильно обрабатывает все другие високосные годы, включая вековые годы, которые не являются високосными годами (например, 2100). Только год 1900 неправильно обрабатывается.

→ Ссылка