Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 プログラミング・ガイド


リテラルを日付として操作する

ウィンドウ表示日付フィールドに、関連したレベル 88 条件名がある場合、 VALUE 節のリテラルは、想定された世紀ウィンドウ 1900-1999 では なく、コンパイル単位の世紀ウィンドウでウィンドウ操作が行われます。

例えば、次のようなデータ定義があるとします。

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

世紀ウィンドウが 1950-2049 で、Date-Due の内容が 081220 (2008 年 12 月 20 日) であれば、以下の最初の条件は真に評価され、2 番目の条件は偽に評価されます。

If Date-Target. . .
If Date-Due = 081220

リテラル 081220 は非日付として扱われるため、1900-1999 の仮定による世紀ウィンドウに対してウィンドウ操作され、1908 年 12 月 20 日を表すことになります。 しかし、レベル 88 の条件名の VALUE 節にリテラルが指定された場合には、そのリテラルは、それが付加されるデータ項目の一部になります。このデータ項目はウィンドウ表示日付フィールドなので、それが参照されるときには、必ず世紀ウィンドウが適用されます。

比較式の中で DATEVAL 組み込み関数を使用してリテラルを日付フィールドに変換することも可能です。結果の日付フィールドは、 ウィンドウ表示日付フィールドまたは拡張日付フィールドとして扱われるので、比較に矛盾は生じません。 例えば、上記の定義を使用すれば、以下の条件はどちらも真に評価されます。

If Date-Due = Function DATEVAL (081220 "YYXXXX")
If Date-Due = Function DATEVAL (20081220 "YYYYXXXX")

レベル 88 条件名では、VALUE 節に THRU オプションを指定できますが、スライディング・ウィンドウではなく固定世紀ウィンドウを YEARWINDOW コンパイラー・オプションで指定する必要があります。 以下に例を示します。

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

この形式の場合、範囲内の 2 番目の項目のウィンドウ操作値は、1 つ目の項目のウィンドウ操作値より大きくなければなりません。ただし、コンパイラーがこの差を検査できるのは、YEARWINDOW コンパイラー・オプションで固定世紀ウィンドウが指定されている場合のみです (例えば、YEARWINDOW(-68) ではなく YEARWINDOW(1940) が指定されている場合)。

ウィンドウ操作の順序に関する要件は、年末尾型日付フィールドには適用されません。年末尾型日付フィールドに対して THROUGH 句を含む条件名 VALUE 節を指定する場合、2 つのリテラルは通常の COBOL 規則に従っていなければなりません。つまり、最初のリテラルは 2 番目のリテラルより小さくなければなりません。


ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)