日付形式変換 (CVTDAT)

日付形式変換(CVTDAT)コマンドは,日付の値の形式を別の形式に変換します(値自体は変わりません)。このコマンドでは,旧形式の中で使用されている日付区切り記号は無視されますが,変換結果に区切り記号を含める場合には,コマンドで区切り文字を指定することができます。

有効な日付だけを変換することができます。変換前の形式または変換後の形式が年を指定するのに2桁だけを使用する場合(例えば*MDY, *DMY, *YMD,または*JUL)には,有効な日付は1940年1月1日から2039年12月31日までの範囲です。そうでない場合には,有効な日付は1928年8月24日から2071年5月9日の範囲です。年が2桁だけで指定される場合には,40から99の範囲は1940から1999と見なされ,00から39の年は2000から2039と見なされます。このコマンドは,QLEAPADJシステム値と一緒に機能します。

制約事項:このコマンドはCLプログラムまたはILE CLプロシージャー内でのみ有効です。

パラメーター

キーワード 記述 選択項目 ノーツ
DATE 変換される日付 文字値 必須, 定位置 1
TOVAR 変換された日付のCL変数 文字値 必須, 定位置 2
FROMFMT 開始日付形式 *SYSVAL, *MDY, *DMY, *YMD, *JUL, *JOB, *MDYY, *DMYY, *YYMD, *CYMD, *ISO, *USA, *EUR, *JIS, *LONGJUL オプショナル, 定位置 3
TOFMT 終了日付形式 *SYSVAL, *MDY, *DMY, *YMD, *JUL, *JOB, *MDYY, *DMYY, *YYMD, *CYMD, *ISO, *USA, *EUR, *JIS, *LONGJUL オプショナル, 定位置 4
TOSEP 終了日付区切り文字 *SYSVAL, *NONE, *JOB, *BLANK, '/', '-', '.', ',' オプショナル, 定位置 5

変換される日付 (DATE)

変換される日付が入っている定数またはCL変数を指定します。区切り文字が入っている定数が指定された時には,それを単一引用符で囲む必要があります(変換では,区切り文字は無視される)。定数で区切り記号を使用する場合には,日付の各部分の先行ゼロを省略することができます(3/3/88または03/03/88は両方とも有効である)。変数が指定される場合には,日付タイプとその日付区切り記号(使用される場合)を入れることができる長さでなければなりません。日付区切り記号として使用できる文字は,スラッシュ(/),ハイフン(-),ピリオド(.),およびコンマ(,)です。すべてブランクを含む変数(X'40')は,長さゼロの日付と見なされ,これは無効です。

これは必須パラメーターです。

変換された日付のCL変数 (TOVAR)

変換後の日付の値を入れるCL変数の名前を指定します。

年間通算日を除くどの形式でも,変換結果の月と日のサブフィールドはそれぞれ2バイトの長さで,右寄せにされ,2バイトのフィールドとするために必要であれば埋め込み文字として先行ゼロが使用されます。

年間通算日および長年間通算日形式の場合には,日フィールドは3バイトの長さで,必要であればゼロが埋め込まれます。年フィールドの長さは年間通算日の場合は2バイトで,長年間通算日の場合は4バイトです。

以下の表を使用して,変数の必要最小長を決定してください。

フィールドのサイズと変数の最小長

TO FMT                  TO SEP 変数の最小長
----------------------  ------  -----------------------------
*JUL                    *NONE   5
*JUL                   任意   6
*MDY, *DMY, *YMD        *NONE   6
*MDY, *DMY, *YMD       任意   8
*MDYY, *DMYY, *YYMD     *NONE   8
*MDYY, *DMYY, *YYMD    任意   10
*CYMD                   *NONE   7
*CYMD                  任意   9
*LONGJUL                *NONE   7
*LONGJUL               任意   8
*ISO, *USA, *EUR, *JIS          10
*JOB                           ジョブの日付形式によって決まります
*SYSVAL                         QDATFMTの値によって決まります

                            フィールド・サイズ
TO FMT                  月   日年
-----------------------  -----  ---  ----
*JUL                     N/A    3    2
*MDY, *DMY, *YMD         2      2    2
*MDYY, *DMYY, *YYMD      2      2    4
*ISO, *USA, *EUR, *JIS   2      2    4
*CYMD                    2      2    2 (+1バイトの世紀フィールド)

これは必須パラメーターです。

開始日付形式 (FROMFMT)

変換する日付の現在の形式を指定します。

*JOB
日付はジョブ属性DATFMTによって指定された形式となります。
*SYSVAL
日付はシステム値QDATFMTによって指定された形式となります。
*MDY
日付は月日年の形式MMDDYYとなります。
*MDYY
日付は月日年の形式MMDDYYYYとなります。
*DMY
日付は日月年の形式DDMMYYとなります。
*DMYY
日付は日月年の形式DDMMYYYYとなります。
*YMD
日付は年月日の形式YYMMDDとなります。
*YYMD
日付は年月日の形式YYYYMMDDとなります。
*CYMD
日付は世紀,年,月,日の形式CYYMMDDとなります。ここで,Cは1928から1999年の場合は0,2000から2071年の場合は1です。
*JUL
日付は年間通算日形式YYDDDとなります。
*ISO
日付は国際標準化機構(ISO)日付形式YYYY-MM-DDとなります。
*USA
日付は米国日付形式MM/DD/YYYYとなります。
*EUR
日付は欧州日付形式DD.MM.YYYYとなります。
*JIS
日付は日本工業規格日付形式YYYY-MM-DDとなります。
*LONGJUL
日付は長年間通算日形式YYYYDDDです。

終了日付形式 (TOFMT)

変換後の日付の形式を指定します。

*JOB
日付の形式はジョブ属性DATFMTで指定された形式に変換されます。
*SYSVAL
日付形式はシステム値QDATFMTによって指定された形式に変換されます。
*MDY
日付形式は月日年の形式MMDDYYに変換されます。
*MDYY
日付形式は月日年の形式MMDDYYYYに変換されます。
*DMY
日付形式は日月年の形式DDMMYYに変換されます。
*DMYY
日付形式は日月年の形式DDMMYYYYに変換されます。
*YMD
日付形式は年月日の形式YYMMDDに変換されます。
*YYMD
日付形式は年月日の形式YYYYMMDDに変換されます。
*CYMD
日付形式は世紀,年,月,日の形式CYYMMDDに変換されます。Cは1928から1999年の場合は0,2000から2071年の場合は1です。現行形式の年が2桁のみである場合には,Cは40から99の場合は0, 00から39の場合は1にセットされます。
*JUL
日付形式は年間通算日形式YYDDDに変換されます。
*ISO
日付形式は国際標準化機構(ISO)日付形式YYYY-MM-DDに変換されます。
*USA
日付形式は米国日付形式MM/DD/YYYYに変換されます。
*EUR
日付形式は欧州日付形式DD.MM.YYYYに変換されます。
*JIS
日付形式は日本工業規格日付形式YYYY-MM-DDに変換されます。
*LONGJUL
日付は長年間通算日形式YYYYDDDです。

終了日付区切り文字 (TOSEP)

変換日(存在する場合)で使用する日付区切り記号のタイプを指定します。

*JOB
変換後の日付では,ジョブ属性DATSEPによって指定された区切り記号が使用されます。
*SYSVAL
変換後の日付では,システム値QDATSEPによって指定された区切り記号が使用されます。
*NONE
変換後の日付では区切り記号は使用されません。
*BLANK
変換後の日付では,ブランク・スペースが日付区切り記号として使用されます。
区切り文字
変換後の日付の中で日付区切り記号として使用する文字を指定してください。区切り記号として使用できる文字は,スラッシュ(/),ハイフン(-),ピリオド(.),およびコンマ(,)です。

1: DMY形式への変換

DCL   VAR(&DATE)  TYPE(*CHAR)  LEN(8)
:
CVTDAT   DATE('12-24-88')  TOVAR(&DATE)  TOFMT(*DMY)

このコマンドは日付12-24-88を変換します。この日付はMDY形式です。FROMFMTパラメーターが指定されていないので,その省略時値*JOBによって,ジョブ属性DATFMTがMDY形式を含むことが指示されます。日付はDMY形式に変換され,ジョブ属性DATSEPに指定された区切り文字が挿入されます。DATSEPがスラッシュを含んでいれば,変換結果は24/12/88になります。

2:ジョブ属性によって指定された形式への変換

DCL   &PAYDAY  *CHAR  6
DCL   &NEWPDAY  *CHAR  6
:
CVTDAT   DATE(&PAYDAY)  TOVAR(&NEWPDAY)
         FROMFMT(*YMD)  TOSEP(*NONE)

このコマンドは,&PAYDAYに入っている日付の形式を,年,月,日からジョブ属性DATFMTによって指定された形式に変換します。例えば,DATFMTにMDY形式が入っていると,変換された日付の形式は月,日,および年になります。変換された日付は,変数&NEWPDAYに入れられます。&NEWPDAYは6桁の文字変数として宣言されているので,TOSEP(*NONE)が必要であり,変換結果は区切り文字を含むことができません。

3: CYMD形式への変換

DCL   &NEWDAY1  *CHAR  7
DCL   &NEWDAY2  *CHAR  7
:
CVTDAT   DATE('01/24/1939')  TOVAR(&NEWDAY1)
         FROMFMT(*MDYY)  TOFMT(*CYMD)  TOSEP(*NONE)
CVTDAT   DATE('01/24/39')  TOVAR(&NEWDAY2)
         FROMFMT(*MDY)  TOFMT(*CYMD)  TOSEP(*NONE)

最初のCVTDATコマンドは,DATEパラメーターに指定された日付を,月,日,4桁の年の形式から世紀,年,月,日の形式に変換します。年は4桁で指定されており,最初の2桁は"19"なので,世紀桁は"0"に設定され,したがって"NEWDAY1の値は"0390124"になります。

2番目のCVTDATコマンドは,DATEパラメーターに指定された日付を,月,日,年の形式から世紀,年,月,日の形式に変換します。年は2桁だけで指定されており,年は40より小さいので,世紀桁は"1"に設定され,したがって"NEWDAY2の値は"1390124"になります。

エラー・メッセージ

*ESCAPE メッセージ

CPF0550
指定した形式では日付が短すぎる。
CPF0551
日付の区切り記号が正しくない。
CPF0552
日付に,位置が正しくないかあるいは余分な区切り記号がある。
CPF0553
日付の数字が多すぎるか少なすぎる。
CPF0554
変換した日付形式に指定した変数が短すぎる。
CPF0555
日付が指定形式になっていないか,あるいは日付が正しくない。
CPF0556
日付に2種類以上の区切り記号が入っている。
CPF0557
日付が使用可能な範囲外になっている。