为什么ColdFusion的大纪元时间是1899年12月30日?

时间:2011-07-16 00:02:00

标签: coldfusion

<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-Dec-99 12:00 AM

1899年12月30日有什么重要意义?

1 个答案:

答案 0 :(得分:7)

正如你所说,它可能与COM / OLE自动化日期格式有关;它的第一个版本早在1995年就用Microsoft VC ++编写(source),它有可能利用了OLE功能。

OLE日期时间类型反过来受到将VBA用于Excel的决定的影响。

Excel必须与Lotus 123向后兼容,Lotus 123将1900视为闰年(但只有可被400整除的时候,可被100整除的年数是闰年);虽然它的第1天正式是1900年1月1日,它将29/02/1900视为现存日,所以其他所有日子都被“向前移动”了一天。这意味着,对于自193年1月3日以来的每一天,“实际第1天”是18/12/1899(或者,如果您愿意,第0天是18/12/1899)。 Excel人员首先使用一个小的黑客来使他们的功能完全像Lotus 123那样。

另一方面,当VBA被添加到Excel时,负责VBA中日期/时间功能的人员决定以某种方式修复整个事情:而不是使用1/1/1900作为第1天并伪造在19/02/1900的存在下,他们实际上已经过了一天的时代了:1900年的前两个月与Lotus 123不再兼容,但系统在一致性中获得了。

来源:http://www.joelonsoftware.com/items/2006/06/16.html