Python에서 날짜와 시간 처리는 내장 모듈인 datetime을 중심으로 이루어지며, date, time, datetime, timedelta 등의 핵심 클래스를 통해 날짜 생성, 계산, 포맷팅 작업을 수행한다. 가장 중요한 메서드로는 datetime 객체를 원하는 형식의 문자열로 변환하는 strftime()과 문자열을 datetime 객체로 파싱하는 strptime()이 있으며, timedelta 객체를 사용하여 날짜 간의 계산을 직관적으로 처리할 수 있다. 고급 기능을 위해서는 시간대 처리를 위한 pytz나 zoneinfo, 더 편리한 날짜 조작을 제공하는 Arrow와 Pendulum, 그리고 대용량 시계열 데이터 분석을 위한 pandas의 날짜 도구들이 널리 사용된다. 이러한 표준 라이브러리와 외부 도구들의 조합을 통해 간단한 날짜 포맷팅부터 복잡한 시간대 변환, 시계열 데이터 분석까지 모든 날짜 관련 작업을 효율적으로 처리할 수 있습니다. Python의 날짜 처리 생태계는 웹 개발, 데이터 분석, 로그 처리 등 다양한 분야에서 개발자의 생산성을 크게 향상시키는 강력한 도구를 제공한다.
파이썬 표준 라이브러리 (datetime 모듈)
1. date, time, datetime 객체 생성
설명: datetime 모듈의 핵심 클래스들입니다. date는 날짜만, time은 시간만, datetime은 날짜와 시간을 모두 표현한다.
import datetime
# date 객체 생성 (년, 월, 일)
d = datetime.date(2025, 7, 7)
print(f"date 객체: {d}")
# time 객체 생성 (시, 분, 초)
t = datetime.time(10, 55, 46)
print(f"time 객체: {t}")
# datetime 객체 생성 (년, 월, 일, 시, 분, 초)
dt = datetime.datetime(2025, 7, 7, 10, 55, 46)
print(f"datetime 객체: {dt}")
2. strftime() 메서드 (Format)
설명: datetime 객체를 지정된 포맷의 문자열로 변환합니다. 사람이 읽기 좋은 형태로 날짜를 출력할 때 사용된다.
import datetime
now = datetime.datetime.now()
# %Y: 4자리 연도, %m: 월, %d: 일, %A: 요일
formatted_str = now.strftime("%Y년 %m월 %d일 (%A) %H:%M")
print(f"현재 시각: {now}")
print(f"포맷된 문자열 (strftime): {formatted_str}")
3. strptime() 메서드 (Parse)
설명: 날짜 형식의 문자열을 datetime 객체로 변환(파싱)합니다. 문자열로 된 데이터를 날짜 객체로 다루고 싶을 때 사용한다.
import datetime
date_string = "2025-07-07 10:55:46"
# 주어진 문자열의 형식과 일치하는 포맷 코드를 제공해야 합니다.
parsed_dt = datetime.datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print(f"날짜 문자열: {date_string}")
print(f"파싱된 객체 (strptime): {parsed_dt}")
4. timedelta 객체 (계산)
설명: 두 날짜 또는 시간 사이의 기간(차이)을 나타냅니다. 날짜를 더하거나 빼는 등 산술 연산에 사용된다.
import datetime
now = datetime.datetime.now()
# 10일 후를 계산하기 위한 timedelta 객체 생성
time_delta = datetime.timedelta(days=10)
future_date = now + time_delta
print(f"현재: {now.strftime('%Y-%m-%d')}")
print(f"10일 후: {future_date.strftime('%Y-%m-%d')}")
5. zoneinfo 모듈 (타임존 처리)
설명: 파이썬 3.9부터 표준 라이브러리에 포함된 모듈로, 타임존을 처리한다.
import datetime
from zoneinfo import ZoneInfo
# 서울 시간대를 기준으로 현재 시각 객체 생성
seoul_tz = ZoneInfo("Asia/Seoul")
now_in_seoul = datetime.datetime.now(seoul_tz)
# 뉴욕 시간대로 변환
new_york_tz = ZoneInfo("America/New_York")
now_in_new_york = now_in_seoul.astimezone(new_york_tz)
print(f"서울 현재 시각: {now_in_seoul.strftime('%Y-%m-%d %H:%M:%S %Z')}")
print(f"뉴욕 현재 시각: {now_in_new_york.strftime('%Y-%m-%d %H:%M:%S %Z')}")
주요 외부 라이브러리
6. dateutil 라이브러리
설명: 다양한 형식의 날짜 문자열을 매우 유연하게 파싱하는 parser 기능으로 유명하다.
# pip install python-dateutil
from dateutil.parser import parse
# 형식이 제각각인 문자열도 자동으로 인식하여 파싱합니다.
dt1 = parse("July 7, 2025")
dt2 = parse("2025-07-07 10:55 AM")
print(f"'July 7, 2025' -> {dt1}")
print(f"'2025-07-07 10:55 AM' -> {dt2}")
7. arrow 라이브러리
설명: datetime을 더 직관적이고 편리하게 다룰 수 있도록 만든 현대적인 라이브러리이다.
# pip install arrow
import arrow
# 현재 시각을 arrow 객체로 가져오기
now = arrow.now()
print(f"Arrow 현재 시각: {now}")
# 타임존 변환 및 상대 시간 표현(humanize)
tokyo_time = now.to("Asia/Tokyo")
print(f"도쿄 시각: {tokyo_time}")
print(f"3시간 전: {now.shift(hours=-3).humanize(locale='ko-kr')}")
8. pandas 라이브러리 (시계열 데이터)
설명: 데이터 분석 라이브러리인 pandas는 시계열 데이터 처리에 매우 강력한 Timestamp와 DatetimeIndex를 제공한다.
# pip install pandas
import pandas as pd
# 단일 날짜/시간을 나타내는 Timestamp 객체
ts = pd.Timestamp("2025-07-07 10:55:46")
print(f"Pandas Timestamp: {ts}")
# 날짜/시간의 배열인 DatetimeIndex 생성
date_list = ["2025-07-07", "2025-07-08", "2025-07-09"]
dt_index = pd.to_datetime(date_list)
print(f"\nPandas DatetimeIndex:\n{dt_index}")
날짜 타입과 타임존 처리 시 주의사항
Python에서 날짜와 시간을 다룰 때는 몇 가지 중요한 주의사항을 반드시 염두에 두어야 한다.
날짜 타입 처리 시 주의사항:
- 문자열과 datetime 객체의 명확한 구분을 유지하고, 항상 적절한 타입 변환을 수행해야 한다.
- strptime() 사용 시 정확한 포맷 문자열을 지정하지 않으면 ValueError가 발생할 수 있으므로 예외 처리를 포함해야 한다.
- 날짜 계산 시 월말이나 윤년 등의 특수한 경우를 고려하여 예상치 못한 결과가 나오지 않도록 주의해야 한다.
타임존 처리 시 주의사항:
- naive datetime과 aware datetime을 절대 직접 비교하거나 계산하지 않아야 하며, 모든 datetime 객체는 동일한 타임존으로 통일한 후 작업해야 한다.
- 일광절약시간(DST) 전환 시점에서는 시간이 중복되거나 존재하지 않을 수 있으므로, pytz나 zoneinfo를 사용할 때 localize()와 normalize() 메서드를 적절히 활용해야 한다.
- 데이터베이스 저장 시에는 항상 UTC로 저장하고 사용자에게 표시할 때만 로컬 시간으로 변환하는 것이 일반적인 모범 사례이다.
이러한 주의사항들을 잘 지키면 날짜와 시간 관련 버그를 크게 줄일 수 있으며, 특히 글로벌 서비스나 시계열 데이터를 다루는 애플리케이션에서는 이러한 세심한 처리가 시스템의 신뢰성과 정확성을 보장하는 핵심 요소가 된다. Python의 강력한 날짜 처리 도구들을 올바르게 활용하여 견고하고 정확한 시간 처리 시스템을 구축하시기 바란다.