TEST (日付/時刻/タイム・スタンプのテスト)
自由形式構文 | TEST{(EDTZ) } {dtz 形式 } フィールド名 |
コード | 演算項目 1
(dtz 形式) |
演算項目 2 | 結果フィールド
(フィールド名) |
標識 | ||
---|---|---|---|---|---|---|
TEST (E) | 日付/時刻または タイム・スタンプ・フィールド | _ | ER | _ | ||
TEST (D E) | 日付形式 | 文字または 数値フィールド | _ | ER | _ | |
TEST (E T) | 時刻の形式 | 文字または 数値フィールド | _ | ER | _ | |
TEST (E Z) | タイム・スタンプ形式 | 文字または 数値フィールド | _ | ER | _ |
TEST 命令コードでは、日付、時刻、またはタイム・スタンプ・フィールドを 使用する前にそれらの妥当性を検査することができます。
使用可能な形式に
ついては、日付データ・タイプ、時刻データ・タイプ、および タイム・スタンプ・データ・タイプを参照してください。
- フィールド名 オペランドが日付、時刻、またはタイム・スタンプとして宣言される場合、次のようになります。
- dtz 形式 オペランドは指定できません。
- 命令コード拡張 'D'、'T'、および 'Z' は使用できません。
- フィールド名 オペランド文字または数値として宣言されているフィールドの場合には、命令コード拡張
'D'、'T'、または 'Z' のいずれかを指定しなければなりません。
注: フィールド名 オペランドは区切り文字のない文字フィールドで、dtz 形式オペランドには、後ろにゼ ロが付いた日付、時刻、またはタイム・スタンプ形式が入っている必要があります。
- 命令コード拡張に 'D' (日付のテスト) が
含まれている場合。
- dtz 形式 は任意指定で、有効な日付形式のいずれかになります (日付データ・タイプを参照)。
- dtz 形式が指定されていない場合は、 制御仕様書に DATFMT キーワードで指定された形式と見なされます。このキーワードが指定されていない場合には、 *ISO と見なされます。
- 命令コード拡張に 'T' (時刻のテスト) が
含まれている場合。
- dtz 形式 は任意指定で、有効な時刻形式のいずれかになります (時刻データ・タイプを参照)。
- dtz 形式が指定されていない場合は、 制御仕様書に TIMFMT キーワードで指定された形式と見なされます。このキーワードが指定されていない場合には、 *ISO と見なされます。
注: 命令コード拡張 (T) で *USA の日付の形式を使用することはできません。 *USA の日付の形式には、数値の結果のフィールドが使用された場合に数値に変 換できない AM/PM の制約があります。 - 命令コード拡張に 'Z' (タイム・スタンプのテスト) が
含まれている場合。
- dtz 形式 は任意指定で、*ISO または *ISO0 のいずれかになります (タイム・スタンプ・データ・タイプを参照)。
- 命令コード拡張に 'D' (日付のテスト) が
含まれている場合。
区切り記号のない数値フィールドおよび文字フィールドは、日付、時刻、またはタイム・スタンプの値の数字部分の妥当性についてテストされます。 文字フィールドは、数字および区切り記号の両方の 妥当性についてテストされます。
フィールド名・オペランドとして指定された文字または数字フィールドが、 テスト対象の形式で必要とされるよりも長い場合は、余分なデータは無視されます。 文字データの場合、左端のデータのみが使用され、 数値データの場合、右端のデータのみが使用されます。 例えば、dtz 形式 オペランドが数値の日付のテストのための *MDY である 場合、フィールド名 オペランドの右端の 6 桁が検査されます。
テスト命令では、命令コード拡張 'E' またはエラー標識 ER を指定する必要がありますが、 両方を指定することはできません。 フィールド名 オペランドが正しくない場合、プログラム状況コード 112 が通知されます。 次に、指定されたエラー処理方法に基づいて、エラー標識がオンに設定されるか、 または %ERROR 組み込み関数が '1' を戻すように設定されます。 エラー処理の詳細については、プログラム例外/エラーを 参照してください。
数値フィールドまたは文字フィールド に 'Z' 命令コード拡張が指定されている場合、 秒の小数部が正確に 6 桁の値であると想定されます。
詳細については、日付命令または テスト命令を参照してください。
図 1. TEST (E D/T/Z) の例
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
D
D Datefield S D DATFMT(*JIS)
D Num_Date S 6P 0 INZ(910921)
D Char_Time S 8 INZ('13:05 PM')
D Char_Date S 6 INZ('041596')
D Char_Tstmp S 20 INZ('19960723140856834000')
D Char_Date2 S 9A INZ('402/10/66')
D Char_Date3 S 8A INZ('2120/115')
D
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
*
* Indicator 18 will not be set on, since the character field is a
* valid *ISO timestamp field, without separators.
C *ISO0 TEST (Z) Char_Tstmp 18
* Indicator 19 will not be set on, since the character field is a
* valid *MDY date, without separators.
C *MDY0 TEST (D) Char_Date 19
*
* %ERROR will return '1', since Num_Date is not *DMY.
*
C *DMY TEST (DE) Num_Date
*
* No Factor 1 since result is a D data type field
* %ERROR will return '0', since the field
* contains a valid date
C
C TEST (E) Datefield
C
* In the following test, %ERROR will return '1' since the
* Timefield does not contain a valid USA time.
C
C *USA TEST (ET) Char_Time
C
* In the following test, indicator 20 will be set on since the
* character field is a valid *CMDY, but there are separators.
C
C *CMDY0 TEST (D) char_date2 20
C
* In the following test, %ERROR will return '0' since
* the character field is a valid *LONGJUL date.
C
C *LONGJUL TEST (DE) char_date3