zoneinfo로 시간대 다루기
시간대 정보가 있는 datetime 다루기
zoneinfo로 시간대 다루기은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
시간대 정보가 없는 날짜/시간과 있는 날짜/시간
시간대 정보가 없는 날짜/시간 객체는 '오후 2시'라고만 표시할 뿐, 어느 지역의 오후 2시인지 알 수 없습니다. 시간대 정보가 있는 날짜/시간 객체는 시간대를 포함하므로 전 세계에서 정확한 순간을 지정합니다.
시간대 정보가 있는 날짜/시간을 사용하면 여러 지역에 걸쳐 있는 사용자로 인해 발생하는 오류를 방지할 수 있습니다.
from datetime import datetime
naive = datetime(2026, 5, 30, 14, 0)
print(naive.tzinfo)zoneinfo 가져오기
Python 3.9 이상에서는 표준 라이브러리에 zoneinfo가 포함되어 있습니다. ZoneInfo를 가져온 후 'Europe/Istanbul'이나 'America/New_York' 같은 IANA 시간대 이름을 전달합니다.
from zoneinfo import ZoneInfo
tz = ZoneInfo('Europe/Istanbul')
print(tz)시간대 정보가 있는 날짜/시간 만들기
날짜/시간을 생성할 때 tzinfo=ZoneInfo(...)를 전달하면 시간대 정보가 포함됩니다. 이제 어느 지역에 속하는지 정확히 알 수 있습니다.
from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print(d)
print(d.tzinfo)UTC를 기준점으로 사용하기
UTC는 세계 공통 기준입니다. datetime.now(ZoneInfo('UTC'))를 사용하면 현재 UTC 시간을 시간대 정보와 함께 가져올 수 있습니다. 시간은 UTC로 저장하는 것이 가장 좋습니다.
from datetime import datetime
from zoneinfo import ZoneInfo
utc_now = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
print(utc_now)시간대 간 변환
.astimezone(tz)는 시간대 정보가 있는 날짜/시간을 다른 시간대로 변환하면서도 같은 순간을 나타내도록 시계를 조정합니다.
from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
ist = utc.astimezone(ZoneInfo('Europe/Istanbul'))
print('UTC:', utc)
print('Istanbul:', ist)같은 순간, 다른 시계
변환 후에는 현지 시계의 숫자가 달라지지만 실제 순간은 동일합니다. 시간대 정보가 있는 두 날짜/시간을 비교하면 표시된 숫자가 아니라 실제 순간을 비교합니다.
from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
ny = utc.astimezone(ZoneInfo('America/New_York'))
print(utc == ny)UTC 오프셋 읽기
.utcoffset() 메서드는 해당 순간에 시간대가 UTC에서 얼마나 떨어져 있는지를 나타내는 timedelta를 반환합니다. 여기에는 일광 절약 시간 조정도 포함됩니다.
from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print('Offset:', d.utcoffset())일광 절약 시간 자동 처리
zoneinfo는 시스템 시간대 데이터베이스를 사용하므로 일광 절약 시간이 시작되고 끝나는 시점을 알고 있습니다. 같은 시간대라도 연중 시기에 따라 오프셋이 달라질 수 있습니다.
from datetime import datetime
from zoneinfo import ZoneInfo
winter = datetime(2026, 1, 15, 12, 0, tzinfo=ZoneInfo('America/New_York'))
summer = datetime(2026, 7, 15, 12, 0, tzinfo=ZoneInfo('America/New_York'))
print('Winter:', winter.utcoffset())
print('Summer:', summer.utcoffset())시간대 정보가 없는 시간에 시간대 연결하기
시간대 정보가 없는 날짜/시간이 이미 알고 있는 현지 시간을 나타낸다면 .replace(tzinfo=...)로 시간대를 연결합니다. 이렇게 하면 시계를 이동하지 않고 시간대 정보만 표시할 수 있습니다.
from datetime import datetime
from zoneinfo import ZoneInfo
naive = datetime(2026, 5, 30, 9, 0)
aware = naive.replace(tzinfo=ZoneInfo('Europe/Istanbul'))
print(aware)시간대 정보가 없는 날짜/시간과 있는 날짜/시간을 섞지 않기
시간대 정보가 없는 날짜/시간과 있는 날짜/시간은 서로 빼거나 비교할 수 없습니다. Python이 TypeError를 발생시킵니다. 프로그램 전체에서 날짜/시간의 형식을 일관되게 유지해야 합니다.
from datetime import datetime
from zoneinfo import ZoneInfo
naive = datetime(2026, 5, 30, 9, 0)
aware = datetime(2026, 5, 30, 9, 0, tzinfo=ZoneInfo('UTC'))
try:
print(aware - naive)
except TypeError as e:
print('Error:', e)시간대를 포함한 형식 지정
시간대 정보가 있는 날짜/시간의 형식을 지정할 때 %Z 코드는 시간대 이름을 출력하고 %z 코드는 숫자로 된 오프셋을 출력합니다.
from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print(d.strftime('%Y-%m-%d %H:%M %Z %z'))빠른 확인
시간대 정보가 없는 날짜/시간과 있는 날짜/시간의 핵심적인 차이는 무엇입니까?
복습: zoneinfo를 사용한 시간대
요약:
- 시간대 정보가 없는 날짜/시간에는 시간대 정보가 없고, 시간대 정보가 있는 날짜/시간에는
tzinfo가 포함됩니다. zoneinfo모듈의ZoneInfo('Region/City')를 사용합니다..astimezone()은 시간대 정보가 있는 날짜/시간을 다른 시간대로 변환합니다.zoneinfo는 일광 절약 시간을 자동으로 처리하므로, 시간대 정보가 없는 날짜/시간과 있는 날짜/시간을 절대 섞지 않아야 합니다.
from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 12, 0, tzinfo=ZoneInfo('UTC'))
print(utc.astimezone(ZoneInfo('Europe/Istanbul')))자주 묻는 질문
“zoneinfo로 시간대 다루기” 강의는 무료인가요?
네 — “zoneinfo로 시간대 다루기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“zoneinfo로 시간대 다루기”에서 뭘 배우나요?
시간대 정보가 있는 datetime 다루기 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Python Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“zoneinfo로 시간대 다루기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- date, time, datetime
- timedelta와 산술 연산
- 서식 지정과 파싱
- zoneinfo로 시간대 다루기