在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;
如此简单的几句,一定会为您换来无穷的效益。