SAP ABAP

SAP ABAP 날짜 관련 Function Module

모델와이 2025. 5. 27. 09:25

안녕하세요 모델와이입니다.

 

SAP ABAP에서는 날짜 계산, 유효성 검사, 공휴일 체크 등 다양한 기능을 손쉽게 처리할 수 있도록 여러 날짜 관련 Function Module(FM)을 제공합니다. 이 글에서는 SAP 개발 실무에서 자주 쓰이는 날짜 관련 FM 14개를 간단한 설명과 함께 예제 코드로 정리해 보았습니다.


✅ 1. RP_CALC_DATE_IN_INTERVAL

→ 기준일로부터 ± 일/월/년을 더하거나 빼서 날짜 계산

DATA: lv_date_from TYPE sy-datum VALUE '20250101',
      lv_date_to   TYPE sy-datum.

CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
  EXPORTING
    date      = lv_date_from
    days      = 10
    months    = 1
    years     = 0
    signum    = '+'
  IMPORTING
    calc_date = lv_date_to.

WRITE: / '계산 결과 날짜:', lv_date_to.

✅ 2. RE_ADD_MONTH_TO_DATE

→ 지정 월수가 들어간 날짜 계산

DATA: lv_old_date TYPE sy-datum VALUE '20250101',
      lv_new_date TYPE sy-datum.

CALL FUNCTION 'RE_ADD_MONTH_TO_DATE'
  EXPORTING
    months  = 3
    olddate = lv_old_date
  IMPORTING
    newdate = lv_new_date.

WRITE: / '3개월 후 날짜:', lv_new_date.

✅ 3. RH_GET_DATE_DAYNAME

→ 요일 이름(MON, TUE...) 및 요일 번호 반환

DATA: lv_daytxt TYPE t247-name,
      lv_daynr  TYPE i.

CALL FUNCTION 'RH_GET_DATE_DAYNAME'
  EXPORTING
    langu = sy-langu
    date  = '20250101'
  IMPORTING
    daynr  = lv_daynr
    daytxt = lv_daytxt.

WRITE: / 'Day:', lv_daytxt, lv_daynr.

✅ 4. DATE_COMPUTE_DAY

→ 요일 번호 반환 (1: 월 ~ 7: 일)

DATA: lv_day TYPE i.

CALL FUNCTION 'DATE_COMPUTE_DAY'
  EXPORTING
    date = '20250101'
  IMPORTING
    day  = lv_day.

WRITE: / 'Day Number:', lv_day.

✅ 5. DATE_GET_WEEK

→ 날짜가 속한 주차 반환 (ex: 202401)

DATA: lv_week TYPE scweek.

CALL FUNCTION 'DATE_GET_WEEK'
  EXPORTING
    date = '20250101'
  IMPORTING
    week = lv_week.

WRITE: / 'Week:', lv_week.

✅ 6. HOLIDAY_CHECK_AND_GET_INFO

→ 공휴일 여부 확인

DATA: lv_found TYPE c.

CALL FUNCTION 'HOLIDAY_CHECK_AND_GET_INFO'
  EXPORTING
    date                = '20250101'
    holiday_calendar_id = 'KR'
  IMPORTING
    holiday_found       = lv_found.

WRITE: / 'Holiday?', lv_found.

✅ 7. WEEK_GET_FIRST_DAY

→ 주차의 첫 날짜(월요일)

DATA: lv_date TYPE sy-datum.

CALL FUNCTION 'WEEK_GET_FIRST_DAY'
  EXPORTING
    week = '202401'
  IMPORTING
    date = lv_date.

WRITE: / 'Week Start Date:', lv_date.

✅ 8. RP_LAST_DAY_OF_MONTHS

→ 해당 월의 마지막 날짜

DATA: lv_last_day TYPE sy-datum.

CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
  EXPORTING
    day_in = '20250101'
  IMPORTING
    last_day_of_month = lv_last_day.

WRITE: / 'Last Day:', lv_last_day.

✅ 9. LAST_DAY_IN_PERIOD_GET

→ 회계기간의 말일 계산

DATA: lv_last_date TYPE sy-datum.

CALL FUNCTION 'LAST_DAY_IN_PERIOD_GET'
  EXPORTING
    i_gjahr = '2025'
    i_periv = 'K4'
    i_poper = '01'
  IMPORTING
    e_date  = lv_last_date.

WRITE: / 'Period End:', lv_last_date.

✅ 10. FIMA_DAYS_AND_MONTHS_AND_YEARS

→ 두 날짜 간 차이를 일/월/년으로 계산

DATA: lv_days   TYPE i,
      lv_months TYPE i,
      lv_years  TYPE i.

CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS'
  EXPORTING
    i_date_from = '20240101'
    i_date_to   = '20250101'
  IMPORTING
    e_days   = lv_days
    e_months = lv_months
    e_years  = lv_years.

WRITE: / 'Diff:', lv_years, 'years', lv_months, 'months', lv_days, 'days'.

✅ 11. END_OF_MONTH_DETERMINE

→ 특정 날짜가 속한 월 말일 계산

DATA: lv_date TYPE sy-datum.

CALL FUNCTION 'END_OF_MONTH_DETERMINE'
  EXPORTING
    datum = '20250101'
  IMPORTING
    tt    = lv_date.

WRITE: / 'End of Month:', lv_date.

✅ 12. DATE_CHECK_PLAUSIBILITY

→ 날짜 유효성 검사

CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
  EXPORTING
    date = '20250230'
  EXCEPTIONS
    plausibility_check_failed = 1
    OTHERS = 2.

IF sy-subrc = 0.
  WRITE: / 'Valid Date'.
ELSE.
  WRITE: / 'Invalid Date!'.
ENDIF.

✅ 13. RH_PM_CONVERT_DATE_TO_MONTH

→ 두 날짜 간 개월 수 계산

DATA: lv_months TYPE i.

CALL FUNCTION 'RH_PM_CONVERT_DATE_TO_MONTH'
  EXPORTING
    begda  = '20240101'
    endda  = '20241231'
  IMPORTING
    months = lv_months.

WRITE: / 'Months Diff:', lv_months.

✅ 14. GET_WEEK_INFO_BASED_ON_DATE

→ 날짜 기준 주차/월요일/일요일 반환

DATA: lv_week   TYPE scweek,
      lv_mon    TYPE sy-datum,
      lv_sun    TYPE sy-datum.

CALL FUNCTION 'GET_WEEK_INFO_BASED_ON_DATE'
  EXPORTING
    date   = '20250103'
  IMPORTING
    week   = lv_week
    monday = lv_mon
    sunday = lv_sun.

WRITE: / 'Week:', lv_week, 'Mon:', lv_mon, 'Sun:', lv_sun.

 


 

더 필요하시거나 궁금한 사항이 있으실 경우 댓글로 문의주세요.

감사합니다.