假定的世纪窗口
当程序使用窗口日期字段时,编译器会将 YEARWINDOW 编译器选项定义的世纪窗口应用于编译单元。 如果窗口日期字段与非日期结合使用,并且上下文要求将非日期视为窗口日期,那么编译器将使用假定的世纪窗口来解析非日期字段。
假定的世纪窗口是 1900-1999 ,这通常与编译单元的世纪窗口不同。
在许多情况下,尤其是对于字面值非日期,此假定的世纪窗口是正确的选择。 在以下构造中,字面值应保留其原始含义 1 , 1972 年 1 月,如果世纪窗口是 1975-2074 ,那么不更改为 2072:
01 Manufacturing-Record.
03 Makers-Date Pic X(6) Date Format yyxxxx.
. . .
If Makers-Date Greater than "720101" . . .
即使假设是正确的,也最好通过使用 DATEVAL 内部函数使年份显式并消除警告级别的诊断消息 (这是应用假定的世纪窗口所产生的结果):
If Makers-Date Greater than
Function Dateval("19720101" "YYYYXXXX") . . .
在某些情况下,假设可能不正确。 对于以下示例,假定 Project-Controls 位于尚未升级 2000 年处理的其他应用程序所使用的副本成员中,因此 Date-Target 不能具有 DATE FORMAT 子句:
01 Project-Controls.
03 Date-Target Pic 9(6).
. . .
01 Progress-Record.
03 Date-Complete Pic 9(6) Date Format yyxxxx.
. . .
If Date-Complete Less than Date-Target . . .
在上例中,要使 Date-Complete 早于(小于) Date-Target ,需要满足以下三个条件:
- 世纪之窗是 1910-2009。
Date-Complete是 991202 (公历日期: 1999 年 12 月 2)。Date-Target为 000115 (公历日期: 2000 年 1 月 15 日)。
但是,由于 Date-Target 没有 DATE
FORMAT 子句,因此它是非日期。 因此,应用到它的世纪窗口是假定的 1900-1999 年的世纪窗口,它被处理为 1900 年 1 月 15 日。 因此, Date-Complete 将大于 Date-Target,这不是 必需 结果。
在这种情况下,您应该使用 DATEVAL 内部函数将 Date-Target 转换为日期字段以进行此比较。 例如:
If Date-Complete Less than
Function Dateval (Date-Target "YYXXXX") . . .