正如所有Perl程序员(希望)都知道的那样,调用Perl localtime函数的年份值相对于1900年.想知道为什么会这样,我看了一下perldoc for localtime,并找到了这个有趣的块:
所有列表元素都是数字的,直接来自C`struct tm'.
然后看一下tm结构的C++引用,我发现tm_year成员变量被声明为int.
问题:那么,为什么年份值相对于1900而不仅仅是完整的四位数年份呢?有一些历史原因吗?在我看来,即使计算中的早期内存限制,整数(显然)足以存储全年.一定有充分的理由; 我很好奇这可能是什么.
Bil*_*ert 14
在C和Unix发明之前,我在1970年代早期编程.两位数的年份用于节省非常紧张的磁盘空间,我们总是试图用这样的技巧来保存它.我工作的第一台机器有两个20兆字节的驱动器,每个驱动器都是一台洗衣机.
我在一家1975年患有Y2K问题的医院工作.病人的年龄是一件很重要的事情,出生日期只有两位数.作为一家医院,我们显然有一些非常老的患者,出生于1800年代.该系统假设任何出生年份为75岁或以上的人出生于1800年代.这对于1890年出生的人来说效果很好,但是一旦1975年1月1日到来,当新生儿被认为是100岁时,所有人都会失败.(它也是一家主要的妇产医院.)我们通过将阈值从75移动到80来解决这个问题.这也是我第一次理解Y2K会出现什么问题,我意识到我会做得更好到了2000年的其他事情.我失败了.
那些认为Y2K不是真正问题的人,因为什么都没发生,所以不了解事先几年修理东西的工作量.
当计算机开始跟踪时间时,年份仅以2位数字引用.至于"为什么"部分,我没有听到任何明确的理由,除了"他们不必再担心这30年".当时钟危险地接近2000年时,人们意识到他们的代码需要在1999年之后跟踪时间,大多数软件仍然使用2位数年份(毕竟,每个人都换成4位数会打破很多代码,除非100%互换).躲避Y2K错误的解决方法是将年份作为1900年的参考.
这是其中一个案例,它本来应该是正确的.(QWERTY键盘布局最初设计效率低.而且,电子电路中的电流被指定为从+到 - ,而实际上,电子实际上是以相反的方式移动).
| 归档时间: |
|
| 查看次数: |
907 次 |
| 最近记录: |