プログラムがウィンドウ表示日付フィールドを使用すると、コンパイラーは YEARWINDOW コンパイラー・オプションによって定義された世紀ウィンドウをコンパイル単位に適用します。 ウィンドウ表示日付フィールドを非日付と一緒に使用する場合で、コンテキスト上、非日付をウィンドウ表示日付として扱う必要がある場合、コンパイラーは仮定による世紀ウィンドウを使用して非日付フィールドを解決します。
仮定による世紀ウィンドウは 1900-1999 であり、これは、一般にはコンパイル単位の世紀ウィンドウと同じではありません。
多くの場合、特にリテラルの非日付の場合、この仮定による世紀ウィンドウは正しい選択です。次の構成では、リテラルは、世紀ウィンドウが例えば 1975-2074 の場合でも、1972 年 1 月 1 日という元の意味を保たなければならず、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 が COPY メンバーの中にあり、このメンバーが、西暦 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 より前の日付 (より小) になるようにするには、次の 3 つの条件が真でなければなりません。
ただし、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") . . .
関連タスク
日付処理の明示的制御