반응형
SAP ABAP에서는 날짜와 시간 정보를 처리할 때 시스템 변수(System Field)를 자주 사용한다. 특히 실시간 프로세스나 로깅, 시간 기반 조건 분기 등에 있어 정확한 일시 처리 방식은 매우 중요하다.
이번 글에서는 sy-datum, sy-datlo, sy-datar, sy-uzeit, sy-timlo 각각의 활용 방법과 차이점을 정리했다. 글로벌 환경에서의 시간대 설정하는 방법도 함께 정리했다.
우선 시스템에서 시간을 설정하는 방법을 먼저 알아보자.
🤔 시스템에서 시간 설정하기
- 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'를 사용한다.
- 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
🔍 시스템 변수의 종류와 활용 예시
- SY-DATUM: 시스템 기준 날짜
- 설명: SAP 시스템 서버의 표준 시간대(System Time Zone) 기준으로 설정된 날짜
- 설정 위치: T CODE: SPRO → General Settings → Time Zones → Maintain System Settings
- 활용 예시:
- 시스템 로그 시간 기록
- 서버 기준 일자 처리
- 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)
- SY-DATAR: 데이터 기록 날짜
- 설명: 일반적으로 테이블에서 읽어온 레코드의 날짜 필드를 참조하거나 배치 프로세스 중 지정된 날짜로 사용됩니다.
- ⚠️ 주의: SY-DATAR는 대부분 내부 프로세스에서 사용되며, 명시적으로 지정하지 않으면 SY-DATUM과 동일한 값을 갖는 경우가 많습니다.
- 활용 예시:
- BDC (Batch Data Communication), IDOC 처리 등에서 입력 일자를 추적할 때 사용
- SY-UZEIT: 시스템 시간
- 설명: Application Server 시간 (시, 분, 초)
- 형식: hhmmss (예: 154305 → 오후 3시 43분 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)에도 동일하게 적용된다.
반응형
'SAP' 카테고리의 다른 글
🔄 STATICS vs. DATA – ABAP 변수 선언의 차이점 비교 정리 (0) | 2025.06.09 |
---|---|
ABAP CX_SY_DYN_CALL_ILLEGAL_FUNC - 부동소수점 계산과 동적 프로그래밍의 대소문자 구문 오류 해결 (0) | 2025.05.28 |
ABAP Fixed Point Arithmetic에 따른 TYPE P 계산 차이 완전 정리 (0) | 2025.05.27 |
ABAP CX_SY_CONVERSION_OVERFLOW - Packed Type(P) 변수 오버플로우 에러 해결 (1) | 2025.05.26 |
BP (Business Partner) | 비즈니스 파트너 마스터 데이터 관리 (0) | 2025.04.10 |