日付処理

このトピックでは、ABAPにおける日付の処理方法を纏めて説明します。

 

日付項目は文字型であり、数値型ではありません。但し、ABAPでは自動的にデータ型変換が実行されるため、日付項目でも数値演算を行うことができます。 なお、SAP標準から様々な日付を計算するための汎用モジュールが用意されているため、それらを利用することもできます。

日付の加減算を行う

指定された日付より何日前又は、何日後の日付を計算するには、日付項目と数値項目の加減算により簡単に実現できます。

DATA:
  W_DATE        TYPE D,
  W_3DAY_BEFORE TYPE D,
  W_5DAY_AFTER  TYPE D.

W_DATE = SY-DATUM.

W_DATE+6(2) = '01'.

日単位だけではなく、月又は年単位で日付の加減算を行うには、汎用モジュールRP_CALC_DATE_IN_INTERVALE(ステータス:未リリース)を使用することができます。

 DATA: l_date TYPE d VALUE '20161201'.
 DO 2 times.
   CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
    EXPORTING
      date       = l_date
       days       = 0
       months     = 1
       signum     = '+'
       years      = 0
    IMPORTING
       calc_date = l_date.

   WRITE: / l_date.
 ENDDO.

月初や月末日付を取得

指定された日付の月初や月末日付を取得するには、汎用モジュールHR_JP_MONTH_BEGIN_END_DATE(ステータス:未リリース)を使用することができます。

DATA:
  W_DATE               TYPE   D,
  W_MONTH_FIRST_DATE   TYPE   D,
  W_MONTH_LAST_DATE    TYPE   D.

W_DATE = SY-DATUM.

CALL FUNCTION 'HR_JP_MONTH_BEGIN_END_DATE'
EXPORTING
  IV_DATE = W_DATE
IMPORTING
  EV_MONTH_BEGIN_DATE = W_MONTH_FIRST_DATE
  EV_MONTH_END_DATE   = W_MONTH_LAST_DATE.

月初日付だけを取得する場合では、汎用モジュールよりも、日付を文字列としてDAYの部分を'01'に置き換えることで簡単に実現できます。 なお、月末日だけを取得する場合では、汎用モジュールLAST_DAY_OF_MONTHS(ステータス:未リリース)を利用することも可能です。

DATA:
  W_DATE   TYPE D.

W_DATE = SY-DATUM.

W_DATE+6(2) = '01'.

週を取得

指定された日付がその年の1月1日から数えて何週目かを判断するには、汎用モジュール「DATE_GET_WEEK」を使用できます。 その何週目の情報は、年・週(yyyyww)の形式で汎用モジュールから返却されます。

DATA: 
  W_DATE TYPE SCAL-DATE,
  W_WEEK TYPE SCAL-WEEK.

WK_DATE = SY-DATUM.

CALL FUNCTION 'DATE_GET_WEEK'
EXPORTING
  DATE = W_DATE
IMPORTING
  WEEK = W_WEEK
EXCEPTIONS
  DATE_INVALID = 1
  OTHERS = 2.

週の初日を取得

汎用モジュールWEEK_GET_FIRST_DAY(ステータス:リリース)を使用すれば、年と週番号から、該当の週の月曜日の日付を取得することができます。

DATA: 
 DATUM LIKE SCAL-DATE,
 WOCHE LIKE SCAL-WEEK.
 WOCHE = '201521'. "2015年21週目
 CALL FUNCTION 'WEEK_GET_FIRST_DAY'
   EXPORTING 
     WEEK = WOCHE
   IMPORTING 
     DATE = DATUM  "2015/05/18が戻される
   EXCEPTIONS 
     WEEK_INVALID = 1.

日付の妥当性をチェック

  • DATE_CHECK_PLAUSIBILITY
    入力された日付が正しいかチェックする
  • DATE_COMPUTE_DAY
    日付に対して平日を戻す
  • DATE_CONVERT_TO_FACTORYDATE
    日付に対して稼働日カレンダを戻す
  • FACTORYDATE_CONVERT_TO_DATE
    稼働日のシリアル番号とカレンダーから日付を返す
  • BAPI_CCODE_GET_FIRSTDAY_PERIOD
    会計期間の初日を取得
  • BAPI_COMPANYCODE_GET_PERIOD
    会計年度と会計日付を取得
  • CONVERSION_EXIT_PDATE_OUTPUT
    日付型の内部書式を外部書式(YYYY/MM/DD)に変換
  • CONVERT_DATE_TO_INTERNAL
    日付の文字列をR/3内部表現に変換する