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 天!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值