본문 바로가기
개발/Python

시간대(Timezone) 처리 방식

by shining park 2025. 4. 9.

❓Python 온라인 강의로 예제를 공부하던 중, 외부 라이브러리 pytz를 사용하는 와중 에러 발생

import pytz

ModuleNotFoundError: No module named 'pytz'

 

Python version : 3.9.6

 

해당 오류는 pytz 모듈이 설치되어 있지 않아서 발생하는 문제

Python 버전에는 문제가 없고, 해당 라이브러리가 설치되어 있지 않아서 생기는 오류

 

❗해결 방법

  • 터미널에서 명령어로 해결 : install pytz
  • IntelliJ에서 설치 : Settings > Project > "프로젝트명" > Python Interperter > + > pytz 검색 후 install

📍추가

Python 3.9 부터는 표준 라이브러리로 zoneinfo를 제공하기 때문에 추가 설치 없이도 사용 가능

 

📍 pytz vs zoneinfo 비교

항목 pytz zoneinfo (Python 3.9 +)
출시 오래됨 (3rd-party) Python 3.9부터 표준 라이브러리 포함
설치 pip intall pytz 필요 설치 불필요 (표준 라이브러리)
타임존 데이터 자체적으로 내장한 타임존 DB 사용 시스템에 설치된 IANA 타임존 DB 사용
주요 차이점 localize()를 반드시 써야 정확한 시간 변환 가능 tzinfo 설정만 해도 정확히 작동
코드 간결성 다소 번거로움(localize, normalize) 더 직관적이고 깔끔함
향후 방향 유지보수는 되지만 권장되느 않음 Python 공식 권장 방식

 

예제

  • pytz 방식
import datetime
import pytz

seoul_tz = pytz.timezone("Asia/Seoul")
# 잘못된 방식 (주의!)
dt = datetime.datetime(2025, 4, 8, 12, 0, 0)
print(dt.astimezone(seoul_tz))

# 올바른 방식
localized = seoul_tz.localize(dt)
print(localized)

 

  • zoneinfo 방식
from datetime import datetime
from zoneinfo import ZoneInfo

dt = datetime(2025, 4, 8, 12, 0, 0, tzinfo=ZoneInfo("UTC"))
converted = dt.astimezone(ZoneInfo("Asia/Seoul"))
print(converted)

 

'개발 > Python' 카테고리의 다른 글

Scikit-Learn > fit(), transform()  (0) 2025.05.10
DB > fetchmany, fetchone, fetchall  (0) 2025.04.27
🪄매직 메소드 __xxx__  (0) 2025.04.17
🦭바다코끼리 연산자  (0) 2025.04.13
string to boolean 형변환  (1) 2025.04.09