почему время эпохи ColdFusion 30 декабря 1899 года? - PullRequest
2 голосов
/ 16 июля 2011
<cfoutput>
    <cfset x = createTimespan(0,0,0,0)>
    <cfset epoch = createDateTime(1899,12,30,0,0,0)>
    <cfset date = epoch + x>
    #date# #dateFormat(date)# #timeFormat(date)#
</cfoutput>

вывод:

0 30 декабря 2009 г., 00:00

Что значительного в 30 декабря 1899 г.?

1 Ответ

7 голосов
/ 16 июля 2011

Как вы сказали, это, вероятно, связано с форматом даты автоматизации 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

...