Excel 日期格式与数字格式转换的BUG

Excel 2003 中的单元格式可以有多种, 如下图:


Excel 日期格式与数字格式转换的BUG_第1张图片


其中日期/时间可以与数字进行互转, 但前提是这些日期/时间必须是Excel能识别的格式, 例如: 输入2009-12-24 , 转换为数字是:40171

输入2009-12-24 10:10:10, 转换为数字是40171., 官方说法其日期是以1900年1月1日为起始日, 时间以午夜零时为起始时间.



Excel 日期格式与数字格式转换的BUG_第2张图片

MS SQL Server 2005 的datetime类型的日期时间也是以1900年1月1日零时作为起始点, 我想, 当我们以这个数值(40171.4237268519)插入MS SQL Server 2005 字段为datetime 类型的表时, 产生的日期应该是: 2009-12-24 10:10:10 ,


但很可惜, 实际上得到的却是:



Excel 日期格式与数字格式转换的BUG_第3张图片


比预期的多出了两天!!! 为什么?

同是微软的东西, 难道算法还会不一致?


原来这里面有一个很隐蔽的BUG(不知道算不算BUG):


先在Excel的某个单元格上设置格式为日期格式, 然后输入0, 回车! 结果是1900-1-0 , 晕了原来Excel的参考起始日期并不是官方说的1900-1-1 , 而是1900-1-0 , 这样算出来的日期就比如SQL Server算出来的多出了一天!

 

再次在单元格上输入60 , 然后回车, 结果是1900-2-29 ! 微软真能搞, 1900年并不是润年(真正的判断法则是:能被4或400整除,但不能被100整除的年份为闰年), 所以这里又多出了一天!

 

所以Excel算出来的日期数值与SQL Server算出来的日期数值相差2 天!


你可能感兴趣的:(Excel,SQL,Server,SQL,算法)