日付処理

このトピックでは、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内部表現に変換する
ログインするとコメントできます。