📄 lc_bcb_18.txt
字号:
如何避免2000年问题
如何避免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;
----如 此 简 单 的 几 句, 一 定 会 为 您 换
来 无 穷 的 效 益 !
返回