主题:【原创】微软啊微软 -- 淡紫若兰
今年,按照中国农历,有个闰月。
这个算新闻么?当然不算,中国农历和国际公历差一堆东西,这有什么奇怪的,公历么,无非是四年一闰年,四百年一个闰年,然后有点调整,基本上,还是很规整的啊。
兄弟们,姐妹们,雷得死安德尖头曼,有些东西大家还是要小心的啊。
微软的家伙们,其实不太仗义的,比如说,日期……
这样说的,大家肯定没有什么印象和想法,很自然。没有什么正常利用的东西么,不正常也不正常到那里去。
那么举个简单的例子,大家都用过Excel吧?
没用过?那……那就没用过吧……反正若兰要说的这个事情也不是有很大关系的。
用过Excel的,那若兰请大家注意一下:1900年2月29号这个日子。
您在Excel里输入正常日期,比如2009-06-10,这肯定没问题,Excel会自动把它作为系统输入日期。
您输入一个2009-13-01呢?excel就当成是字符串或者一类的东西处理了,这个很自然——您见过十三月么?
前面咱们说了:公历闰年的计算方法。按照这个计算方法,1900年的二月,那是不可能有29号的。
但是您输入一个1900-02-29看看?
excel会立刻认定:这是个正确日期,然后按照日期格式进行处理!
这个问题,若兰敢说,百分之九十九的人不会在乎,但我估计,也有一些人,冷汗会立刻淌出来吧。
这个问题,很早就有人提出来了,可是,咱们信任的ms,一直还是用这个计算方法的。
第一次发现这个问题,还是若兰在使用Python的时候,当时的经理在使用Plone/Zope的时候发现的。
倒数据,搬数据库,郁闷了:为什么日期会差2呢?如果日期差1,那也正常,有些系统把一月一号作为零,有些把一月一号当作一,差个一,那很正常。
可是问题在于,以起始日期算,差一,可是到了结算日期,也就是200x年,差的就是二了,这可是一天啊,差哪儿去了呢?
然后大家就查这个问题,方法很简单,折半查询,很快就查到了问题:
1900年2月29日这个不合理的日期,被微软认为是合理的。
微软,那可是一帮牛人啊。
这个问题……
第二天,当时若兰的经理姐姐同志很郁闷地告诉若兰:咱们昨天折腾了半下午的东西,我在文档里找到了一些说明,唉,早看到也不至于闹了这么长时间。
那,说明是怎么说的啊?若兰问。
就是说这个是微软历来的问题……
·#¥%……—
好在当时我们做的东西,连建国之前都不会涉及,这个日期更不会提到。
无伤大雅,但心惊胆战。
完。
花。
谢谢花~~~
Joel on software里面有一篇文章专门讲Bill老大亲自Review的故事。1900年是闰年吗?其实不是的。Joel“发现可被100整除的年份不一定是闰年,除非它能被400整除。”
外链出处,这可是我自己辛辛苦苦翻译的。
系统核心部分的bug吧,呵呵,智者千虑,必有一失啊。
恭喜:你意外获得【通宝】一枚
鲜花已经成功送出。
此次送花为【有效送花赞扬,涨乐善、声望】
有时候输入一个字符串,如3-8,他会自作聪明地给你改成8月3日。
如果我从外部读入一个文本文件,里面有像日期的字符串就都自作聪明地改成了日期,改不成的就不变,一片混乱啊。
另外,建议你出营之后,就多到信息技术版发帖子,你身上肯定有不少好东西可写的。
现在你也可以在新兵营发贴时要求预订至信息技术。
我记得还有个什么统计学函数的参数设置和书本上的不一样,虽然差的不大,对最后的计算结果影响可以忽略。
教授说她给微软去信想问个所以然,结果按照微软的传统当然是石沉大海……
最近会写一些若兰经历的旧闻,以后会逐渐向技术版面转战