您现在的位置是:首页 > 文章详情

没有所谓的 1875 纪元,美国 150 多岁老人领社保福利不是 COBOL 语言的锅

日期:2025-02-19点击:38

近期,一位美国政府官员曾宣称:“我们这里有些人看起来都已经150岁了”,并指出这些人正在领取社会保障福利。由此,有人开始流传这样一种说法:社会保障局(SSA)在存储日期时使用了一个1875年的纪元,把那些未知出生年份的记录存为0,从而默认显示为1875年。

这种观点的起源可以追溯到某个帖子,帖子中有人调侃道:

“看起来埃隆那群天才程序员根本就不懂COBOL的工作原理。社会保障系统正是运行在COBOL上,而COBOL并没有专门的日期或时间类型。于是日期就以数字形式存储,按照ISO 8601标准计算,纪元定在了150年前(1875年)——也就是米制标准的开始。结果如果不知道某个日期,就会存储成0,而在COBOL中这就会默认解析为1875年,也就是150年前。”

然而,笔者对此并不认同,主要基于以下几点理由:

数据库中存在1875年前的出生年份

2007年,社会保障局曾发布过一份数据集,该数据集包含了在2007年1月之前发放的社会保障号码持有者的收入记录(约占全部数据的1%)。在这份数据集中,他们明确说明:

  • 移除了出生年份早于1870年的5,935条记录
  • 移除了出生年份等于2007的1,096条记录
  • 以及少数缺失出生年份的记录

这表明,SSA的数据库中确实保存了1875年前(甚至1869年及更早)的出生年份数据,并非将未知年份一律默认为1875。

数据中没有1875年出生人数激增的异常

如果系统将所有未知出生年份的记录默认转换为1875年,那么在统计数据中,1875年的出生人数应该会异常增多。但实际上,从公开数据来看,并不存在这样一个“高峰”。(注:该数据集只是1%的样本,若存在默认值问题,趋势应当更加明显。)

 

社会保障局并未使用ISO 8601标准存储日期

负责跟踪社会保障福利支付的主记录(Master Beneficiary Record, MBR)建立于1962年,这远早于ISO 8601标准于1988年的发布。即便是其前身ISO 2016标准也在1976年发布,并且并没有任何依据指向1875年。实际上,有研究论文基于SSA数据指出,SSA对生日等信息的存储采用的是固定宽度格式,而不是ISO 8601标准的日期字符串格式。

The data abstracted from the MBR consisted of a 26-character record for each deceased individual. The four data items on each record were… the month and year of death

ISO 8601标准本身并不涉及纪元概念

ISO 8601仅仅是一种用于表示日期和时间的字符串格式,其本质并不是基于数字计算时间流逝,因此根本无需设定一个“纪元”。虽然ISO 8601:2004版曾固定引用1875年5月20日——即《米制公约》在巴黎签署的那一天——作为参考日期,但这一引用在ISO 8601-1:2019版中已被移除。换句话说,这个日期仅用于定义格里高利历,并非作为一个时间计数的起点。

没有任何证据显示1875年被用作时间计算的起点

经过查找,笔者没有发现任何系统或标准会将1875年作为时间纪元。尤其在COBOL语言中,也没有这样的约定或实践。所有迹象都表明,所谓的“1875纪元”只是个误解。

总的来说,从SSA的数据实践、存储方式以及国际标准的角度来看,都没有任何证据支持“1875纪元”这一说法。该观点看似有趣,但实际上缺乏坚实的依据。

原文:https://iter.ca/post/1875-epoch

原文链接:https://www.oschina.net/news/334682/1875-epoch-cobol-150-american
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章