[返回]
计算机世界1999年第20期

在Delphi中避免2000年问题

智慧软件工作室 谢振斌

   我们知道,两位数的年份(00 -99),只能表示100 年的日期,超过范围则必定引起二义性。通常系统将它约定为1900 -1999 年,这样自然就无法表示2000 年了。如果我们将00 -99 约定为1930 -2029 年,也就是对映射的时间窗作一定的移动,那么对于多数应用都能完全满足纪年的需要,而且不需要改动数据储存和输入输出的格式。

  为了实现这一时间窗的移动,多数系统必须人工干预,也就是必须在输入或转换2 位数年份时强制映射到约定的时间窗中。

  那么,有没有更为简捷的解决办法呢?

  打开Windows 98 的控制面板中区域设置,在日期选项卡中有几个参数和2000 年跨越有密切相关,一是短日期格式,可以是yy -M -d 或yyyy -MM -dd 等,它决定系统日期的显示格式。一是两位数年份的变换时间窗,我们可以设为1930 -2029 年。

  经过这样设定后回到Delphi 中观察,我们发现日期显示是变为4 位年份格式。但是当您试着在日期栏中输入‘00 -1 -1'会发现,系统依然变换为1900 年1 月1 日,问题仍未解决。

  经过不断研究,我们找到了答案。原来在Delphi 中同样有个时间窗定义变量TwoDigitYearCenturyWindow。将它设为60,它的含义就是将今年的年份前溯60 年作为时间窗起点,也就是变换时间窗为1939 -2038 年,这样一来问题就彻底解决了。

  值得一提的还有另外一个变量ShortDateFormat, 作为新开发的系统,最好设为‘yyyy -MM -dd', 这样系统就不依赖于Windows 系统设置的格式,而且统一为整齐的10 位宽度,这时既可输入4 位数年份又可方便输入两位数年份,让系统根据时间窗来自动转换。

  当然对于某些特殊应用中年份可能出现超出时间窗范围的日期,那就一定得完整输入了,就算不小心输成2 位数形式,也能立即从系统转换出来的4 位年份中看出错误,得到及时纠正!

  综上所述, 在已开发的老系统中, 可在程序开始处加入以下几行, 再用Delphi4.0 重新编译,即可消除通常的2000 年问题!


   DateSeparator := '-’;

   ShortDateFormat:='yy -mm -dd';

   TwoDigitYearCenturyWindow:=80;

  对于新开发的系统,最好在程序开始处加入:


   DateSeparator := '-’;

   ShortDateFormat:='yyyy -mm -dd';

   TwoDigitYearCenturyWindow:=70;

  如此简单的几句,一定会为您换来无穷的效益。