为什么Perl的localtime函数(和C的tm结构)中的年份值相对于1900?

Jon*_*hop 15 c perl time

正如所有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不是真正问题的人,因为什么都没发生,所以不了解事先几年修理东西的工作量.

  • RE:`tm_month`,我总是听到`tm_month`打算用作下标的探索,如:`@months = qw(Jan Feb Mar ... Dec); 打印$ months [$ tm_month];` (5认同)

Jar*_*und 5

当计算机开始跟踪时间时,年份仅以2位数字引用.至于"为什么"部分,我没有听到任何明确的理由,除了"他们不必再担心这30年".当时钟危险地接近2000年时,人们意识到他们的代码需要在1999年之后跟踪时间,大多数软件仍然使用2位数年份(毕竟,每个人都换成4位数会打破很多代码,除非100%互换).躲避Y2K错误的解决方法是将年份作为1900年的参考.

这是其中一个案例,它本来应该是正确的.(QWERTY键盘布局最初设计效率低.而且,电子电路中的电流被指定为从+到 - ,而实际上,电子实际上是以相反的方式移动).

  • 如果有人在这里发明了一台时间机器,我们是否都可以就todo-list达成一致?我一个人总是想警告本杰明富兰克林在正确的轨道上,但他的想法是错误的方式. (2认同)
  • QWERTY布局[设计](http://en.wikipedia.org/wiki/QWERTY#History_and_purposes)通过将像"TH"这样的公共对放在一起来最小化干扰. (2认同)