创建无法在历史日期工作的软件是不好的做法?

Ico*_*ood 3 language-agnostic

这是让我想到这一点的确切情况.

我有自动生成下一个逻辑项目编号的功能.该项目编号的一部分包括项目编号的创建年份.我们现在在2010年,所以日期中最重要的部分(为了我的项目编号)是"10"并且是两个字符长.如果我的程序碰巧在2009年执行,它是当前编码的方式,我会得到一个错误的项目编号,因为我的系统期望两位数的日期(10)而不是一个数字(9).

我的问题根本不是关于我的具体情况,是否做一个字符串操作是一个好主意:)但更多的是基于我的标题中陈述的原则.编写在历史记录中无法正常运行的软件是不是一个坏主意?您是否遇到过类似情况,您采取了什么路线?为什么?

Jim*_*hel 5

完全有效的说,"我的程序不适用于历史数据." 在您的具体情况下,"历史数据"是2010年1月1日之前的内容.我强烈反对那些认为对您的代码施加此类限制通常是个坏主意的人.

我们每天都有这些限制.time_t例如,标准UNIX 的范围为正负68年左右.存储日期和时间的应用程序time_t不能代表1901-12-13之前或2030-01-19之后的日期.然而,使用该时间格式编写了数百万个应用程序.但我们没有听到有人认为那些节目有点不好.

构建应用程序完全是权衡.如果在最佳判断中没有必要涵盖过去或甚至将来某个任意点以外的日期,那就没关系了.这与设计一个只能容纳X个记录或使用1TB驱动器部署的系统没有什么不同,因为您知道最终在数据增长时必须进行升级.事实是,我们无法针对每一种可能性进行设计.

那些认为"Y2K错误"显示为什么你不应该对你的代码施加任意限制的人不会考虑事情.毕竟,4位数年份也是一个任意限制.如果我想在过去或将来代表一万年的日期怎么办?那个错误的Y10K bug!在某些时候,我们对我们支持的事物范围进行限制.

每个软件都有局限性.您可以选择适合您的应用程序的限制以及您将来如何看待它.

  • 你应该在银行业工作几个月.诸如"让我们用这个新的假设/计划重新计算过去15年的税收"这样的要求是很常见的(当然不是事先计划好的).比"让我们的客户乘以10000"更常见,顺便说一下. (2认同)
  • 在银行业工作了好几年,我对这种事情非常熟悉.在该行业工作的程序员应该使用他的判断而不是选择会使这样的事情变得不可能的限制. (2认同)
  • 如果对读者来说不明显:Y2038问题不是`time_t`的标准UNIX定义所固有的.这取决于实现这种类型有多大,所以你基本上有28年的时间停止使用32bit`time_t`的实现当前日期,如果你正在处理未来的日期,或许已经这样做了.巧合的是,我的养老金说我在2038年退休了,所以这不是我的问题,但我的养老金提供者在某种程度上至少在一个背景下处理过它(可能只是在这种情况下使用"int"年,不可否认). (2认同)