将文字操作为日期

如果窗口日期字段具有关联的 level-88 条件名称,那么 VALUE 子句中的文字将针对编译单元的世纪窗口而不是针对假定的 1900-1999 世纪窗口进行窗口化。

关于此任务

例如,假设您具有以下数据定义:


05  Date-Due        Pic 9(6)  Date Format yyxxxx.
    88  Date-Target           Value 101220.

如果世纪窗口是1950-2049, Date-Due 的内容是101220(代表2010年12月20日),则第一个条件为真,第二个条件为假:


If Date-Target. . .
If Date-Due = 101220

字面值 101220 被视为非日期; 因此它针对假定的 1900-1999 年的世纪窗口进行窗口化,并表示 1909 年 12 月 20 日。 但是,如果在 level-88 condition-name 的 VALUE 子句中指定了字面值,那么该字面值将成为其附加到的数据项的一部分。 由于此数据项是窗口日期字段,因此只要引用了该数据项,就会应用世纪窗口。

您还可以在比较表达式中使用 DATEVAL 内部函数将文字转换为日期字段。 生成的日期字段被视为窗口日期字段或扩展日期字段,以确保一致的比较。 例如,根据之前的定义,以下两个条件都满足:


If Date-Due = Function DATEVAL (101220 "YYXXXX")
If Date-Due = Function DATEVAL (20101220 "YYYYXXXX")

使用 level-88 condition-name ,可以在 VALUE 子句上指定 THRU 选项,但必须在 YEARWINDOW 编译器选项中指定固定世纪窗口,而不是滑动窗口。 例如:


05  Year-Field  Pic 99  Date Format yy.
    88 In-Range         Value 98 Thru 06.

使用此表单时,范围中第二个项的窗口值必须大于第一个项的窗口值。 但是,仅当 YEARWINDOW 编译器选项指定了固定的世纪窗口 (例如, YEARWINDOW(1940) 而不是 YEARWINDOW(-70)) 时,编译器才能验证此差异。

窗口订单需求不适用于年最后日期字段。 如果使用 THROUGH 短语为年份-最后日期字段指定条件-名称 VALUE 子句,则这两个字面量必须遵循正常的 COBOL 规则。 即,第一个字面值必须小于第二个字面值。