このトピックでは、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内部表現に変換する