반응형

SAP ABAP에서는 날짜와 시간 정보를 처리할 때 시스템 변수(System Field)를 자주 사용한다. 특히 실시간 프로세스나 로깅, 시간 기반 조건 분기 등에 있어 정확한 일시 처리 방식은 매우 중요하다.

이번 글에서는 sy-datum, sy-datlo, sy-datar, sy-uzeit, sy-timlo 각각의 활용 방법과 차이점을 정리했다. 글로벌 환경에서의 시간대 설정하는 방법도 함께 정리했다.

우선 시스템에서 시간을 설정하는 방법을 먼저 알아보자.

🤔 시스템에서 시간 설정하기

  1. T-CODE: SPRO
    SAP 시스템의 표준 시간대 시스템 세팅은 SPRO에서 TIMEZONE을 설정하게 된다.

2가지 Time Zone이 존재한다.

  • System TIme Zone: Application Server의 Time Zone 설정
  • User's Default Time Zone: 개별 사용자의 Time Zone 설정

한국은 그리니치 표준 시간보다 9시간 빠른 시간대를 이용하므로 'UTC+9'를 사용한다.

  1. T-CODE: SU3
    User's Default Time Zone은 사용자 프로파일의 Personal Time Zone과 연계되어 있다. 사용자 레벨에서 프로파일 Time Zone이 없으면, IMG 세팅 화면에서의 User's Default Time Zone을 기본으로 사용하게 된다.


🕑 시스템 변수로 날짜와 시간 출력하기

REPORT z02_07.

* 시스템 변수로 날짜, 시간 출력하기

WRITE: / 'SY-DATUM (시스템 표준 시간대 기준):', sy-datum,     "2025.05.30
       / 'SY-DATLO (사용자 로컬 시간대 기준):', sy-datlo,     "2025.05.30
       / 'SY-DATAR (Data Record의 날짜):', sy-datar,             "(빈 값)
       / 'SY-UZEIT (시스템 시간):', sy-uzeit,                   "13:40:20
       / 'SY-TIMLO (로컬 시간):', sy-timlo.                    "13:40:20
REPORT z02_07.

* 1. 날짜 계산 (sy-datum)

DATA : gv_date1 TYPE d.

gv_date1 = sy-datum.
WRITE : / 'gv_date1:', gv_date1. "20250530

gv_date1 = gv_date1 + 3.
WRITE : / 'gv_date1 + 3:', gv_date1. "20250602

* 1. 날짜 계산 (sy-datlo)

DATA : gv_date2 TYPE d.

gv_date2 = sy-datlo.
WRITE : / 'gv_date2:', gv_date2. "20250530

gv_date2 = gv_date2 + 3.
WRITE : / 'gv_date2 + 3:', gv_date2. "20250602

* 1. 날짜 계산 (sy-datar)

DATA : gv_date3 TYPE d.

gv_date3 = sy-datar.
WRITE : / 'gv_date3:', gv_date3." (빈 값)

gv_date3 = gv_date3 + 3.
WRITE : / 'gv_date3 + 3:', gv_date3. "00010104

* 2. 시간 계산 (sy-uzeit)

DATA : gv_time1 TYPE t.

gv_time1 = sy-uzeit.
WRITE : / 'gv_time1:', gv_time1. "130815

gv_time1 = gv_time1 - 60.
WRITE : / 'gv_time1 - 60:', gv_time1. "130715

* 2. 시간 계산 (sy-timlo)

DATA : gv_time2 TYPE t.

gv_time2 = sy-timlo.
WRITE : / 'gv_time2:', gv_time2. "130815

gv_time2 = gv_time2 - 60.
WRITE : / 'gv_time2 - 60:', gv_time2. "130715

 

🔍 시스템 변수의 종류와 활용 예시

  1. SY-DATUM: 시스템 기준 날짜
    • 설명: SAP 시스템 서버의 표준 시간대(System Time Zone) 기준으로 설정된 날짜
    • 설정 위치: T CODE: SPRO → General Settings → Time Zones → Maintain System Settings
    • 활용 예시:
      • 시스템 로그 시간 기록
      • 서버 기준 일자 처리
  2. SY-DATLO: 사용자 로컬 기준 날짜
    • 설명: SAP 사용자 프로파일에 설정된 개인 Time Zone 또는 기본 사용자 Time Zone 기준으로 설정된 날짜
    • 설정 위치: T-CODE: SU3 (User Parameters) → Personal Time Zone
    • 활용 예시:
      • 글로벌 사용자의 현지 시간 처리
      • 사용자의 로컬 보고서 출력 날짜
      • 🌍 예시: 한국 본사(SY-DATUM = 2025-05-30), 중국 공장 사용자(SY-DATLO = 2025-05-29)
  3. SY-DATAR: 데이터 기록 날짜
    • 설명: 일반적으로 테이블에서 읽어온 레코드의 날짜 필드를 참조하거나 배치 프로세스 중 지정된 날짜로 사용됩니다.
    • ⚠️ 주의: SY-DATAR는 대부분 내부 프로세스에서 사용되며, 명시적으로 지정하지 않으면 SY-DATUM과 동일한 값을 갖는 경우가 많습니다.
    • 활용 예시:
      • BDC (Batch Data Communication), IDOC 처리 등에서 입력 일자를 추적할 때 사용
  4. SY-UZEIT: 시스템 시간
    • 설명: Application Server 시간 (시, 분, 초)
    • 형식: hhmmss (예: 154305 → 오후 3시 43분 5초)
  5. SY-TIMLO: 로컬 시간
    • 설명: 사용자 Time Zone 기준 시간 (시, 분, 초)
    • 활용 예시:
      • 사용자 시간대 기반 업무 마감 시간 체크 등


📌 시스템 변수 직접 출력 vs 변수 저장 후 출력

SY-DATUM을 바로 WRITE 구문에 출력할 때와 SY-DATUM을 gv_date1이라는 변수에 담아 출력할 때 포맷이 다르게 출력된다. 앞서 사용한 예제 코드를 비교해 보자.

* 직접 출력
WRITE: / 'SY-DATUM 직접 출력:', sy-datum.     " → 2025.05.30 (형식화된 출력)

* 변수에 담아 출력
DATA(gv_date1) = sy-datum.
WRITE: / 'SY-DATUM 변수 출력:', gv_date1.     " → 20250530 (내부 형식 그대로 출력)

 

🔖 시스템 변수 및 출력 형식 차이 요약

🔖 시스템 변수 정리표 및 출력 형식 차이 요약

시스템 변수 정리

변수 설명 예시 값 특이사항
SY-DATUM 서버 기준 날짜 20250530 가장 일반적인 날짜 변수
SY-DATLO 사용자 기준 날짜 20250530 사용자 Time Zone 기준
SY-DATAR 데이터 레코드 날짜 없음 BDC/IDOC 등 특수한 경우만 값 존재
SY-UZEIT 서버 기준 시간 130815 hhmmss 형식
SY-TIMLO 사용자 기준 시간 130815 Time Zone 고려된 시간

 

출력 포맷 차이

  • WRITE 구문에서 시스템 변수는 SAP가 자동으로 보기 좋은 형식(YYYY.MM.DD)으로 포맷해서 출력한다.
  • DATA gv_date TYPE d. 형태의 일반 변수는 내부 형식(YYYYMMDD)을 포맷하지 않고 그대로 출력한다.
  • 시간 변수 (SY-UZEIT, SY-TIMLO)에도 동일하게 적용된다.
반응형

+ Recent posts