바로투입이력카드
SAP 게시판

정보·팁

ABAP 날짜, 시간, 타임스탬프 정리: d, t, utclong과 시간대

에이든ABAP 개발자운영자모듈 MMSD기타조회 3

3줄 요약

  • 날짜는 d(8자 yyyymmdd), 시간은 t(6자 hhmmss), 타임스탬프는 utclong(UTC 기준)이 기본 타입이고, DB에는 datn, timn 을 권해요.

  • 날짜끼리 빼면 일수가 나오고, d 를 정수로 바꾸면 0001-01-01 부터의 일수예요. 값이 유효한지 먼저 확인하세요(EXACT d( ... )).

  • 클라우드용 ABAP 에서는 sy-datum, sy-uzeit 같은 시스템 필드를 쓰지 않고 cl_abap_context_info 나 XCO 라이브러리를 써요.

어떤 상황에서 쓰나요

마감일 계산, 월말 처리, 로그 시각 기록처럼 날짜와 시간은 어디서나 나와요. 그런데 20240231 같은 잘못된 날짜가 조용히 초기값이 되거나, 시간대가 섞여 하루가 어긋나는 사고도 흔해요. 연재 4회는 치트시트의 *Date, Time, and Time Stamp* 편을 정리해 타입, 유효성, 계산을 한눈에 보게 했어요.

핵심 내용

타입

  • 내장 ABAP 타입: d(날짜, 8자 yyyymmdd), t(시간, 6자 hhmmss, 24시간제), utclong(8바이트 타임스탬프, UTC 기준).

  • DDIC 내장 타입: datn, timn, utclong 등. 치트시트는 DB에 날짜와 시간을 저장할 때 datn, timn 을 쓰면 해당 함수와 식에 최적화되어 있어 유리하다고 해요.

  • timestamp(초 단위, yyyymmddhhmmss)와 timestampl(100ns 단위, 소수 일곱 자리) 데이터 요소는 패킹 숫자 형태의 타임스탬프예요.

  • 타임스탬프는 utclong 을 권해요. POSIX 시각으로, 하루는 86,400초이고 윤초는 지원하지 않아요.

현재 날짜와 시간대

  • 클라우드용 ABAP 에서는 sy-datum, sy-uzeit, sy-timlo, sy-datlo 같은 날짜·시간 시스템 필드를 쓰지 말라고 해요(시스템 고유 값이라 클라우드 맥락에서는 의미가 없다는 설명이에요). 대신 cl_abap_context_info=>get_system_date( )(UTC 기준), get_system_time( ), get_user_time_zone( ) 이나 XCO 라이브러리(xco_cp=>sy->date( )->as( xco_cp_time=>format->iso_8601_extended )->value)를 써요.

  • 클라우드 ABAP 환경은 시간대가 기본 UTC 로 설정되어 있다고 안내해요.

  • 시간대 정보를 담은 CDS 뷰는 I_TIMEZONE 이에요.

유효성. 날짜(또는 시간) 필드에 접근하기 전에 값이 유효한지 확인하라고 해요. EXACT d( '20240231' ) 은 CX_SY_CONVERSION_NO_DATE 예외를 던져요. 반대로 잘못된 날짜를 숫자로 바꾸면 조용히 0이 돼요.

계산

  • d 끼리 빼면 일수예요(20240101 - 20231227 = 5).

  • CONV i( date ) 는 0001-01-01 부터의 일수이고, 이를 이용해 요일을 계산할 수 있어요(( 5 + date MOD 7 ) MOD 7 + 1: 1=월요일).

  • 월의 첫날은 일(day) 부분을 01 로 바꾸고(replace( ... )), 전월 마지막 날은 그 날짜에서 1을 빼요. 날짜 필드는 문자형이라서 substring 으로 연, 월, 일을 꺼낼 수도 있어요.

  • XCO 로 add( iv_day = 5 ), subtract( ... ) 처럼 더하고 뺄 수 있어요. 월을 더할 때 결과가 존재하지 않는 날짜(8월 31일 + 1개월)가 되면, 기본인 preserving 은 오류를 내고 ultimo 는 그 달의 마지막 날(9월 30일)로 맞춰 줘요.

타임스탬프 `utclong`. utclong_current( ) 로 현재 값을 얻고, 계산은 utclong_add 같은 내장 함수를 써요. 문자열 템플릿으로 |{ utclong_current( ) TIMESTAMP = ISO }| 처럼 출력 형식을 정할 수 있어요(이전 회 참고).

ABAP SQL 과 CDS 의 날짜·시간 함수. extract_year( ), extract_month( ), is_valid( ) 같은 함수가 ABAP SQL 과 CDS 둘 다에 있어요.

DATA some_date TYPE d VALUE '20240101'.
DATA(days_diff) = some_date - CONV d( '20231227' ).   " 5
TRY.
    DATA(inv_date) = EXACT d( '20240231' ).
  CATCH cx_sy_conversion_no_date.
    " 잘못된 날짜
ENDTRY.

주의할 점

  • 치트시트는 클라우드용 ABAP 환경을 기준으로 해서 cl_abap_context_info, XCO 라이브러리가 나와요. 클래식 ABAP 시스템에서는 클래스나 문법이 다를 수 있으니, 내 환경에서 되는 API 를 확인하세요.

  • 시스템 필드(sy-datum)를 쓰지 말라는 것은 클라우드용 ABAP 규칙이에요. 클래식 환경의 기존 프로그램까지 당장 바꾸라는 뜻은 아니에요.

  • 치트시트는 계속 갱신되는 문서예요. 이 편의 첫 공개는 2024년 3월이고, 제가 읽은 판은 2026년 10월 기준이에요. 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.

원문 주소: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/23_Date_and_Time.md

출처와 이용 안내
  • 원문: ABAP Cheat Sheets - Date, Time, and Time Stamp · 작성자 SAP SE and contributors SAP-samples · 작성일 2024-03-12 · 기준 릴리스에 따라 다름 원문은 최신 ABAP 기준, 일부는 클라우드용 ABAP 전용 · 확인일 2026-10-25

  • 이 글은 위 원문을 읽고 한국어로 요약·재구성한 글이며 번역본이 아니에요. 원문의 저작권은 작성자와 SAP에 있어요.

  • 원문은 Apache-2.0 라이선스(https://www.apache.org/licenses/LICENSE-2.0)로 공개된 자료예요. 이 글은 내용을 한국어로 줄이고 순서를 바꾼 변경본이며, 원저작자가 이 글을 보증하지 않아요.

  • 설정과 화면은 릴리스마다 달라요. 적용하기 전에 원문과 SAP Help Portal, 관련 SAP Note에서 최신 내용을 확인해 주세요.

  • SAP와 SAP 제품명은 SAP SE의 상표예요. 바로투입은 SAP와 관련이 없어요.

댓글 0

아직 댓글이 없어요.

정보·팁 목록전체 목록