Как вы сказали, это, вероятно, связано с форматом даты автоматизации COM / OLE;его первая версия была написана в Microsoft VC ++ еще в 1995 году ( источник ), и вполне вероятно, что она использовала функции OLE.
Тип даты / времени OLE, в свою очередь, зависел от решенияиспользование VBA в Excel.
Excel должен был быть обратно совместим с Lotus 123, который рассматривал 1900 как високосный год (но годы, кратные 100, являются високосными годами, только если они делятся на 400);в то время как его первый день был официально 01.01.1900, он считал 29.02.1900 существующим днем, поэтому все остальные дни были «сдвинуты вперед» на один.Это означало, что для каждого дня, начиная с 01.01.1900, «фактический день 1» был 31.12.1899 г. (или, если хотите, день 0 был 30.12.1899 г.).Сначала парни из Excel использовали небольшой хак, чтобы заставить их функции вести себя точно так же, как в Lotus 123.
С другой стороны, когда VBA был добавлен в Excel, люди, отвечающие за функции даты / времени в VBA, решиливсе исправить каким-то образом: вместо использования 1 января 1900 года в качестве первого дня и фальсификации присутствия 29 февраля 1900 года они фактически перенесли эпоху назад на один день: первые два месяца 1900 года были несовместимыбольше с Lotus 123, но система приобрела согласованность.
Источник: http://www.joelonsoftware.com/items/2006/06/16.html