파이썬 zoneinfo 모듈을 빠르게 사용하기 위한 치트시트입니다. IANA 타임존, aware datetime 생성, 시간대 변환, DST 처리 등 표준 시간대 작업 패턴을 최소 예제로 정리합니다.
zoneinfo는 Python 3.9+에서 IANA 시간대 데이터베이스를 사용하는 표준 모듈입니다. pytz 없이도 올바른 시간대 처리가 가능합니다.
언제 이 치트시트를 보나?
시간대가 있는 datetime을 다룰 때
UTC ↔ 로컬 시간 변환이 필요할 때
서로 다른 시간대 간 변환이 필요할 때
핵심 사용법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fromzoneinfoimportZoneInfofromdatetimeimportdatetime# ZoneInfo 객체 생성tz_seoul=ZoneInfo("Asia/Seoul")tz_utc=ZoneInfo("UTC")# aware datetime 생성dt=datetime(2024,6,15,12,0,tzinfo=tz_seoul)# 현재 시간 (특정 시간대)now=datetime.now(tz_seoul)# 시간대 변환dt_utc=dt.astimezone(tz_utc)
최소 예제
1. 기본 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
fromzoneinfoimportZoneInfofromdatetimeimportdatetime# 서울 시간대seoul=ZoneInfo("Asia/Seoul")# aware datetime 생성dt=datetime(2024,6,15,14,30,tzinfo=seoul)print(dt)# 2024-06-15 14:30:00+09:00# 현재 시간now=datetime.now(seoul)print(now)
fromzoneinfoimportZoneInfofromdatetimeimportdatetime,timezone# UTC 시간 생성 방법 1: ZoneInfoutc_tz=ZoneInfo("UTC")dt1=datetime.now(utc_tz)# UTC 시간 생성 방법 2: datetime.timezone.utcdt2=datetime.now(timezone.utc)# 둘 다 동일하게 동작print(dt1.astimezone(ZoneInfo("Asia/Seoul")))
4. 사용 가능한 시간대 목록
1
2
3
4
5
6
7
8
9
10
fromzoneinfoimportavailable_timezones# 모든 사용 가능한 시간대all_zones=available_timezones()print(len(all_zones))# 약 594개# 특정 지역 시간대 필터링asia_zones=[tzfortzinall_zonesiftz.startswith('Asia/')]print(sorted(asia_zones)[:5])# ['Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau']
fromzoneinfoimportZoneInfofromdatetimeimportdatetimeny=ZoneInfo("America/New_York")# 여름 (DST 적용, -04:00)summer=datetime(2024,7,1,12,0,tzinfo=ny)print(summer)# 2024-07-01 12:00:00-04:00# 겨울 (DST 미적용, -05:00)winter=datetime(2024,1,1,12,0,tzinfo=ny)print(winter)# 2024-01-01 12:00:00-05:00
7. 문자열 파싱과 시간대
1
2
3
4
5
6
7
8
9
10
11
fromzoneinfoimportZoneInfofromdatetimeimportdatetime# ISO 형식 파싱 (Python 3.11+)dt=datetime.fromisoformat("2024-06-15T14:00:00+09:00")print(dt)# 수동으로 시간대 추가naive_str="2024-06-15 14:00:00"naive=datetime.strptime(naive_str,"%Y-%m-%d %H:%M:%S")aware=naive.replace(tzinfo=ZoneInfo("Asia/Seoul"))
8. 시간 비교
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
fromzoneinfoimportZoneInfofromdatetimeimportdatetimeseoul=ZoneInfo("Asia/Seoul")tokyo=ZoneInfo("Asia/Tokyo")# 같은 시각 (다른 표현)dt_seoul=datetime(2024,6,15,14,0,tzinfo=seoul)dt_tokyo=datetime(2024,6,15,14,0,tzinfo=tokyo)# 서울과 도쿄는 같은 UTC 오프셋print(dt_seoul==dt_tokyo)# True# UTC 시간 확인print(dt_seoul.utcoffset())# 9:00:00print(dt_tokyo.utcoffset())# 9:00:00
9. 날짜 연산
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fromzoneinfoimportZoneInfofromdatetimeimportdatetime,timedeltaseoul=ZoneInfo("Asia/Seoul")dt=datetime(2024,6,15,14,0,tzinfo=seoul)# timedelta 연산next_day=dt+timedelta(days=1)print(next_day)# 2024-06-16 14:00:00+09:00# DST 경계를 넘는 경우도 자동 처리ny=ZoneInfo("America/New_York")before_dst=datetime(2024,3,10,1,30,tzinfo=ny)after_2h=before_dst+timedelta(hours=2)print(after_2h)# DST로 인해 3:30이 됨
10. tzdata 패키지 (Windows)
1
2
3
4
5
6
7
# Windows에서는 tzdata 패키지 필요# pip install tzdatafromzoneinfoimportZoneInfo# 패키지 설치 후 사용 가능seoul=ZoneInfo("Asia/Seoul")
주요 시간대 예시
1
2
3
4
5
6
7
8
9
10
11
fromzoneinfoimportZoneInfo# 주요 도시ZoneInfo("Asia/Seoul")# 서울 (KST, +09:00)ZoneInfo("Asia/Tokyo")# 도쿄 (JST, +09:00)ZoneInfo("Asia/Shanghai")# 상하이 (CST, +08:00)ZoneInfo("America/New_York")# 뉴욕 (EST/EDT)ZoneInfo("America/Los_Angeles")# LA (PST/PDT)ZoneInfo("Europe/London")# 런던 (GMT/BST)ZoneInfo("Europe/Paris")# 파리 (CET/CEST)ZoneInfo("UTC")# UTC