ADDDUR (期間の加算)

自由形式構文 (許可されていない - %YEARS および %MONTHS などの 期間関数では + または += 演算子を使用)
コード 演算項目 1 演算項目 2 結果フィールド 標識
ADDDUR (E) 日付/時刻 期間: 期間コード 日付/時刻 _ ER _

ADDDUR 命令は演算項目 2 に指定された期間を日付または時刻に加算し、結 果の日付、時刻、またはタイム・スタンプを結果フィールドに入れます。

演算項目 1 は任意指定で、日付、時刻、またはタイム・スタンプ・フィールド、 サブフィールド、配列、配列要素、リテラル、または定数を入れることが できます。 演算項目 1 にフィールド名、配列、または配列要素が入っている場合には、 そのデータ・タイプは結果フィールドに指定されたフィールドと同じデータ ・タイプでなければなりません。 演算項目 1 が指定されていない場合には、期間は結果フィールドに指定され たフィールドに加えられます。

演算項目 2 は必須で、2 つの副演算項目が入ります。 1 番目は期間で、数値フィールド、配列要素、または小数点以下の桁数がゼロ の定数になります。期間が負の場合には、その値が日付から引かれます。 2 番目の副演算項目は、期間のタイプを示す有効な期間コードでなければなりません。 期間コードは、結果フィールドのデータ・タイプと同じでなければなりません。 年、 月、または日の期間は日付フィールド加算できますが、時間の分の期間は 加算できません。期間コードとその短縮形のリストについて は、日付命令を参照してください。

結果フィールドは、日付、時刻、またはタイム・スタンプ・データ・タイプ・フ ィールド、配列、または配列要素でなければなりません。 演算項目 1 がブランクの場合には、期間は結果フィールドの値に加えられま す。 結果フィールドが配列の場合には、演算項目 2 の値が配列のそれぞれの要素 に加算されます。 結果フィールドが時刻フィールドの場合には、結果は常に有効な時刻となりま す。 例えば、23:59:59 に 59 分を加えると 24:58:59 になります。 この時刻は有効でないので、コンパイラーはこれを 00:58:59 に 調整します。

月の期間を日付に加算する場合の一般的な規則では、月の部分が期間の月数だ け増やされて、日の部分は変わりません。 この例外は、結果の日の部分が結果の月の実際の日数を超える場合です。 この場合には、結果の日の部分が実際の月の最終日付に合わせて調整されます。次の例 (*YMD 形式と想定している) はこの点について示しています。

年の期間を加算する場合にも同様の結果になります。 例えば、'92/02/29' に 1 年を加えると (結果の年は閏年ではないので) 調 整された値の '93/02/28' になります。

次のいずれかの場合にはエラー状態になります。

エラー状態では次のことが行われます。

プログラム状況コードが 112 または 113 である 例外を処理するために、命令コード拡張 'E' またはエラー標識 ER を指定できますが、 両方を指定することはできません。 エラー処理の詳細について は、プログラム例外/エラーを参照してください。

注:
システムは期間を 15 桁に制限します。 有効数字が 15 桁を超える期間を加え るとエラーまたは切り捨ての原因になります。これらの問題は、演算項目 2 の最初の副演算項目を 15 桁に制限することによって回避することができます。

日付/時刻フィールドの処理の詳細については、日付命令を 参照してください。

図 273. ADDDUR 命令
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
HKeywords+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
H TIMFMT(*USA) DATFMT(*MDY&)
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
 *
DDateconst        C                   CONST(D'12 31 92')
 *
 * Define a Date field and initialize
 *
DLoandate         S               D   DATFMT(*EUR) INZ(D'12 31 92')
DDuedate          S               D   DATFMT(*ISO)
Dtimestamp        S               Z
Danswer           S               T
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
 * Determine a DUEDATE which is xx years, yy months, zz days later
 * than LOANDATE.
C     LOANDATE      ADDDUR    XX:*YEARS     DUEDATE
C                   ADDDUR    YY:*MONTHS    DUEDATE
C                   ADDDUR    ZZ:*DAYS      DUEDATE
 * Determine the date 23 days later
 *
C                   ADDDUR    23:*D         DUEDATE
 * Add a 1234 microseconds to a timestamp
 *
C                   ADDDUR    1234:*MS      timestamp
 * Add 12 HRS and 16 minutes to midnight
 *
C     T'00:00 am'   ADDDUR    12:*Hours     answer
C                   ADDDUR    16:*Minutes   answer
 * Subtract 30 days from a loan due date
 *
C                   ADDDUR    -30:*D        LOANDUE


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]