01 group-item.
05 date1 FORMAT DATE "%m/%d/@Y".
05 date2 FORMAT DATE.
05 time1 FORMAT TIME SIZE 8 LOCALE german-locale.
05 time2 FORMAT TIME "%H:%M:%S".
05 time3 FORMAT TIME.
05 timestamp1 FORMAT TIMESTAMP.
日時クラスの項目の場合、FORMAT 文節は PICTURE 文節の代わりに使用されます。
上の例では、キーワード FORMAT の後に、語 DATE、TIME、または TIMESTAMP がきます。
これらの語は、日時項目のカテゴリーを識別します。
日時項目のカテゴリーを示す予約語またはコンテキストに依存した語の後には、フォーマット設定リテラルを入れることができます。 フォーマット設定リテラルとは、日付項目または時刻項目の形式を記述する非数値リテラルです。
データ項目 date1 の場合、%m は月、%d は日、 また @Y は年 (2 桁の世紀を含む) を表します。 文字 % および @ は指定子の先頭にきます。 date1 というフォーマット設定リテラルで使用される 3 つの指定子は、「IBM® Rational® Development Studio for i: ILE COBOL 解説書」に記載されている指定子のセットの一部です。フォーマット設定リテラルは、指定子と区切り文字を組み合わせたものです。 そこで、もう一度 date1 を見てみると、区切り文字が 2 つあり、両方とも文字 / です。
上の例では、各指定子は事前決定されたサイズをもっています。 たとえば、データ項目 time2 は、%H、%M、 および %S という 3 つの指定子をもっています。 それらは、時 (2 つの数字)、分 (2 つの数字)、および秒 (2 つの数字) です。 このほかに、区切り記号が 2 つあり、どちらも文字 : です。 したがって、time2 の合計サイズは 8 文字です。
SPECIAL-NAMES. FORMAT OF DATE IS "@C:%y:%j",
FORMAT OF TIME IS "%H:%M:%S:@Sm".
上記の SPECIAL-NAMES 段落がグループ項目 group-item と同じプログラムに指定されていた場合、date2 の日付形式は @C:%y:%j になります。 また、SPECIAL-NAMES 段落が存在しない場合には、日付項目の形式はデフォルトである ISO がとられます。 ISO 日付の形式は @Y-%m-%d です。フォーマット設定リテラルのない カテゴリー時刻の唯一の項目 (暗黙的または明示的に定義されているもの) は time3 であるため、 上の SPECIAL-NAMES 段落が存在しなければ、time3 は時刻形式 %H:%M:%S:@Sm をもつことになります。 ただし、FORMAT OF TIME 文節が SPECIAL-NAMES 段落にある場合には、形式はデフォルトとして ISO がとられます。 ISO 時刻の形式は %H.%M.%S です。
DDS では、日付フィールドの形式を指定するために、DATFMT キーワードを指定することができます。 DATFMT キーワードは、ゾーン、パック、および文字の各フィールドに対しても指定できます。 これらのタイプのフィールドでは、COPY DDS は、通常、数字ゾーン、数字パック、および英数字の各データ項目について、 それぞれ PICTURE 文節を生成します。 CVTOPT パラメーターの *CVTTODATE 値を指定すると、 これらの項目について COPY DDS に強制的に FORMAT 文節を生成させることができます。
ゾーン、パック、および文字の各 DDS フィールドに許されている DATFMT パラメーターと、CVTOPT(*CVTTODATE) 変換パラメーターが指定されたときに DDS から生成される、 それぞれに相当する ILE COBOL 形式のリストについては 日時クラスを参照してください。
01 TimestampT IS TYPEDEF
FORMAT TIMESTAMP VALUE "1997-12-01-05.52.50.000000".
01 group-item.
05 date1 FORMAT DATE OCCURS 3 TIMES VALUE "1997-05-08".
05 date2 FORMAT DATE "@Y-%m-%d" VALUE "2001-09-08".
05 date3 REDEFINES date2 FORMAT DATE.
88 date3-key-dates VALUE "1997-05-01" THRU "2002-05-01".
05 time1 FORMAT TIME "%H:%M" VALUE "14:10".
05 time2 LIKE time1.
05 timestamp1 TYPE TimestampT.
上の文節はいずれも、日時クラスの項目と一緒に使用する際にはさまざまな規則があります。
SYNCHRONIZED 文節は日時項目に指定できますが、文書化用としてしか扱われません (項目の位置合わせは行いません)。
日時項目の USAGE 文節は日付または時刻項目の DISPLAY または PACKED-DECIMAL でかまいませんが、タイム・スタンプは USAGE DISPLAY だけです。 日時項目に PACKED-DECIMAL という USAGE がある場合には、フォーマット設定リテラルには指定子しか入れられず (区切り文字は不可)、 しかもその指定子は結果として数字を生じるものでなければなりません。
日時項目の VALUE 文節は、日時項目の形式の非数値リテラルにします。 コンパイル時に、VALUE 文節の非数値リテラルの形式が FORMAT 文節に一致しているかどうかを確かめる検査は行われません。 VALUE 文節の非数値リテラルが正しいものであるようにするのは、プログラマーが行う必要があります。
日時項目と関連付けられたレベル 88 (条件名) は THRU 句をもつことができます。 日時項目と関連付けられたレベル 88 項目の VALUE 文節には、 親項目と一致する形式の非数値リテラルを含めてください。 レベル 88 項目が比較条件で使用されると、結果として日時比較が発生します。
日時項目を参照する LIKE 文節は、そのサイズを変更できません。 LIKE 文節により、新しい項目は、SIZE 文節および LOCALE 文節を含め、FORMAT 文節の属性をすべて継承します。
日時データ・タイプは SORT (および MERGE) 操作でも使用できますが、いくつかの制限が適用されます。 これらの制限については 日時データ・タイプに関する考慮事項を参照してください。