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 形式 オペランドが数値の日付のテストのための *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