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

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



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

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



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


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




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

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


原来这里面有一个很隐蔽的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 天!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值