问题的主题是日期和时间的计算。
。NET和许多其他平台一样,严重依赖于某种形式的最小离散时间表示,例如DateTime.Ticks
。tick是Int64
类型,其最大值大约为9 * 1018。
假设。net时钟从1-JAN-0001开始滴答作响,按照我的粗略计算,大约需要3万年的时间才能到达Int64.MaxValue
。
问题是:如果明年发生这种溢出,一般的处理方法是什么?
我认为,就像许多COBOL程序中存在的Y2K错误一样,您将不得不移动根或扩展值。现在,为了使这个陈述不那么抽象,我们假设他们移动了根——所以它不再是1-JAN-0001
,它可能是1-JAN-1001
。
那会引起一些问题。这就是在COBOL中解决千年虫问题的方法,所以当2040
在许多商店中滚动时,他们将不得不再次更改滚动日期,或者延长值。
在他们的例子中,扩展值仅仅意味着使用一个4位数的年份,但在这些MF程序中,这并不总是那么简单,因为数据并不总是存储在数据库中,很多时候它存储在VSAM文件或其他地方。
所以,这是我认为会发生的事情,随着计算继续变得更大更快(更小……嗯)你会发现他们会简单地将值从Int64
扩展到Int128
,并将根保留在它所在的位置。我能想到的副作用是零,所以这是最安全的方法。