邢彬 /* XingBin.net */
XING Bin, a Coder, Geek, Railfan, and Outdoors Fan
face

历史上多出的一天

发布 / 2011-02-25 11:22   于 / 邢氏彬语   文 / 邢彬   浏览 / 5131  

很多人都知道历史上曾经少了10到11天,这就是著名的日期消失事件。消失的日期在1582年10月5日~1582年10月14日,而在英国则是1752年9月3日~1752年9月13日,这是由历法原因造成的。

昨天给大一的学生带助教,要求他们做一个电子日历程序,简单的要求是输入年和月份,格式化输出该月的天数。更高的要求则是通过判断该月1日是星期几来输出真实的月历。而为了检查闰年等问题的判断,我要求学生输出1900年2月、2000年2月和2011年12月的月历。这时突然发现了一个奇怪的现象,那就是在1900年2月29日,历史上多出来了这一天。

很明显,1900年是平年,2月共有28天。而通过Excel的Weekday函数却可以计算出结果。Weekday函数是输出一个日期是星期几的函数,返回值1~7分别表示周日到周六。从图片可以看到,Weekday(1900-1-1)=1,说明这天是星期日。同理可得1900年的2月28日为周四,3月1日为周六。多出来的2月29日很明显为周五。值得注意的是,Weekday函数不支持1900年以前的日期,而1901年是平年,不存在2月29日,Weekday(1901-2-29)也同样得不到结果。

真实的情况是怎样的呢?事实上,1900年1月1日是星期一,Excel得到的星期天是错误的。同样,Excel得到的1900年1月1日~2月29日的星期几的信息都是错误的,到3月1日才恢复正常。而这么明显的错误为什么会存在呢?经搜索资料,这并不是Excel开发人员的过错,而是Lotus 1-2-3程序就存在这个问题,Excel为了保持兼容,保留了这个“Bug”。好在那个时候没有这么先进的计算机,在电子世界中多出这不存在的一天也没什么关系。如果这种问题出现在现在就要乱套了,一个千年虫问题折腾的世界不得安宁,2038年1月19日03:14:07这个时刻怎么度过还是个问题呢。

有兴趣活到2100年的朋友可以看看这一年的2月29日是否存在。:P

关联阅读: Excel Bug

请登录后留言

LOGIN
FOLLOW ME
CATEGORIES
COPYRIGHT
Creative Commons License
除特殊声明的页面外,本站作品采用 知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议 进行许可。