다국적 시스템이나 글로벌 서비스를 구축할 때 '시간대(Time Zone)'는 매우 중요한 이슈 중 하나입니다. Oracle의 NEW_TIME() 함수는 두 시간대 간 시간 값을 변환할 수 있는 간단하면서도 유용한 도구입니다. 본 글에서는 NEW_TIME 함수의 사용법, 시간대 코드 목록, 실무 활용 예제 등을 중심으로 자세히 설명합니다.
1. NEW_TIME() 함수란?
NEW_TIME(date, from_tz, to_tz)
함수는 특정 날짜 및 시간을 한 시간대에서 다른 시간대로 변환해 주는 Oracle 내장 함수입니다.
기본 문법
NEW_TIME(date_value, 'FROM_TIMEZONE', 'TO_TIMEZONE')
date_value
: 변환할 날짜 값 (DATE 타입)FROM_TIMEZONE
: 기존 시간대TO_TIMEZONE
: 변환 대상 시간대
지원되는 주요 시간대 코드
코드 | 설명 |
---|---|
'PST' | Pacific Standard Time (UTC -8) |
'MST' | Mountain Standard Time (UTC -7) |
'CST' | Central Standard Time (UTC -6) |
'EST' | Eastern Standard Time (UTC -5) |
'AST' | Atlantic Standard Time (UTC -4) |
'GMT' | Greenwich Mean Time (UTC +0) |
'HST' | Hawaii Standard Time (UTC -10) |
2. 기본 사용 예제
예제 1: GMT → PST 시간대 변환
SELECT NEW_TIME(DATE '2025-06-04', 'GMT', 'PST') AS pst_time FROM dual;
-- 결과: 2025-06-03 16:00:00
예제 2: EST → HST 변환
SELECT NEW_TIME(SYSDATE, 'EST', 'HST') AS hst_time FROM dual;
3. 실무 활용 예제
3-1. 고객 접속 시간대 변환
SELECT user_id,
login_time,
NEW_TIME(login_time, 'GMT', 'PST') AS local_time
FROM user_log;
3-2. 다국적 회의 일정 통합
SELECT meeting_id,
meeting_time,
NEW_TIME(meeting_time, 'PST', 'EST') AS est_meeting_time
FROM meetings;
3-3. 시스템 로그 정리
SELECT log_id,
log_time,
NEW_TIME(log_time, 'CST', 'GMT') AS gmt_time
FROM server_logs;
4. 유의사항 및 한계
- NEW_TIME 함수는 DST(서머타임)를 고려하지 않습니다.
- TIMEZONE 코드는 대문자로 입력해야 합니다.
- DATE 타입만 지원하며, TIMESTAMP는 사용할 수 없습니다.
- Oracle 12c 이후에는
FROM_TZ(), TO_TIMESTAMP_TZ()
사용을 권장하는 경향도 있습니다.
예제: TIMESTAMP 사용 시 오류
SELECT NEW_TIME(SYSTIMESTAMP, 'GMT', 'PST') FROM dual;
-- 오류 발생: DATE 타입만 지원
5. 최신 시간대 처리: NEW_TIME 대안
NEW_TIME은 간단하지만 한계가 명확합니다. 보다 정밀한 시간대 처리를 위해 Oracle에서는 다음 함수를 대안으로 제공합니다.
FROM_TZ(timestamp, timezone)
TO_TIMESTAMP_TZ(char, format)
SYS_EXTRACT_UTC()
예제: FROM_TZ + AT TIME ZONE
SELECT FROM_TZ(CAST(SYSTIMESTAMP AS TIMESTAMP), 'UTC') AT TIME ZONE 'US/Pacific' FROM dual;
6. 요약
NEW_TIME() 함수는 Oracle에서 시간대 간 간단한 변환이 필요할 때 유용하게 사용됩니다. DATE 타입 기준의 함수이므로 TIMESTAMP와 DST 지원이 필요하다면 다른 고급 함수를 고려해야 합니다. 단순한 타임존 변환이 필요한 경우 여전히 빠르고 직관적인 선택지입니다.
참고자료
- Oracle 공식 문서
- Oracle 10g NEW_TIME Reference
- 사내 글로벌 로깅 시스템 개발 경험 기반
'Database' 카테고리의 다른 글
[Oracle] 오라클 DBTIMEZONE() 함수로 데이터베이스 시간대 정확히 설정하는 방법 (0) | 2025.06.05 |
---|---|
[Oracle] 오라클 LOCALTIMESTAMP()로 시간대 기반 데이터 정확히 처리하기 (0) | 2025.06.05 |
[Oracle] 오라클 TRUNC() 숫자 절삭 처리 방법과 ROUND()와의 차이점 (0) | 2025.06.05 |
[Oracle] 오라클 ROUND() 함수 초보 탈출 가이드: 숫자/날짜 반올림 핵심 정리 (0) | 2025.06.05 |
[Oracle] 오라클 EXTRACT()로 연도별, 월별, 일자별 통계 분석하는 방법 (0) | 2025.06.05 |