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

정보·팁

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

에이든ABAP 개발자운영자모듈 MMSD기타수정됨조회 15

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 라이브러리를 써요.

어떤 상황에서 쓰나요

마감일을 계산하거나 로그 시각을 남길 때는 값의 형식뿐 아니라 날짜의 유효성과 시간대도 확인해야 해요. 이번 글에서는 날짜·시간·타임스탬프 타입을 구분하고, 값을 검사하고 계산하는 방법을 알아봐요.

같은 순간도 시간대에 따라 시계에 표시되는 값이 다릅니다. 아래의 UTC 00:00과 한국 09:00은 같은 순간을 나타내므로, 문자열 모양뿐 아니라 기준 시간대도 함께 확인해야 합니다.

AI 설명 그림: 같은 순간, 다른 시간대. 개념을 돕기 위한 이미지이며 실제 SAP 화면이 아닙니다.
AI 설명 그림: 같은 순간, 다른 시간대. 개념을 돕기 위한 이미지이며 실제 SAP 화면이 아닙니다.

핵심 내용

타입

  • 내장 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

아직 댓글이 없어요.

정보·팁 목록전체 목록