<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日有什么重要意义?
答案 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不再兼容,但系统在一致性中获得了。