날짜와 시간
在Python中 날짜와 시간을 다루는 방법讓我們學習. datetime 모듈은 시간 관련 작업의 핵심 도구입니다.
datetime 모듈 소개 ⏰
datetime 모듈의 주요 클래스:
datetime: 날짜와 시간을 함께 다룸date: 날짜만 다룸time: 시간만 다룸timedelta: 시간 차이를 다룸timezone: 시간대 정보
현재 날짜와 시간
현재 datetime 얻기
from datetime import datetime
# 현재 날짜와 시간
now = datetime.now()
print(now) # 2025-11-27 14:30:45.123456
# UTC 현재 시간
utc_now = datetime.utcnow()
print(utc_now)
# 각 요소 접근
print(f'연도: {now.year}')
print(f'월: {now.month}')
print(f'일: {now.day}')
print(f'시: {now.hour}')
print(f'분: {now.minute}')
print(f'초: {now.second}')
print(f'마이크로초: {now.microsecond}')
현재 날짜만 얻기
from datetime import date
# 오늘 날짜
today = date.today()
print(today) # 2025-11-27
print(f'연도: {today.year}')
print(f'월: {today.month}')
print(f'일: {today.day}')
print(f'요일: {today.weekday()}') # 0(월) ~ 6(일)
print(f'요일: {today.isoweekday()}') # 1(월) ~ 7(일)
datetime 객체 생성하기
날짜와 시간 생성
from datetime import datetime, date, time
# 특정 날짜와 시간 생성
dt = datetime(2025, 11, 27, 14, 30, 45)
print(dt) # 2025-11-27 14:30:45
# 날짜만 생성
d = date(2025, 11, 27)
print(d) # 2025-11-27
# 시간만 생성
t = time(14, 30, 45)
print(t) # 14:30:45
# 날짜와 시간 결합
dt_combined = datetime.combine(d, t)
print(dt_combined) # 2025-11-27 14:30:45
문자열과 datetime 변환 📝
strftime: datetime → 문자열
from datetime import datetime
now = datetime.now()
# 다양한 포맷으로 변환
print(now.strftime('%Y-%m-%d')) # 2025-11-27
print(now.strftime('%Y년 %m월 %d일')) # 2025년 11월 27일
print(now.strftime('%H:%M:%S')) # 14:30:45
print(now.strftime('%Y-%m-%d %H:%M:%S')) # 2025-11-27 14:30:45
print(now.strftime('%Y/%m/%d %p %I:%M')) # 2025/11/27 PM 02:30
주요 포맷 코드
| 코드 | 의미 | 예시 |
|---|---|---|
%Y | 4자리 연도 | 2025 |
%y | 2자리 연도 | 25 |
%m | 월 (01-12) | 11 |
%B | 월 이름 | November |
%b | 월 이름 축약 | Nov |
%d | 일 (01-31) | 27 |
%A | 요일 | Wednesday |
%a | 요일 축약 | Wed |
%H | 시 (00-23) | 14 |
%I | 시 (01-12) | 02 |
%M | 분 (00-59) | 30 |
%S | 초 (00-59) | 45 |
%p | AM/PM | PM |
%f | 마이크로초 | 123456 |
strptime: 문자열 → datetime
from datetime import datetime
# 문자열을 datetime으로 변환
date_str = '2025-11-27'
dt = datetime.strptime(date_str, '%Y-%m-%d')
print(dt) # 2025-11-27 00:00:00
# 시간 포함
datetime_str = '2025-11-27 14:30:45'
dt = datetime.strptime(datetime_str, '%Y-%m-%d %H:%M:%S')
print(dt)
# 다양한 형식
formats = [
('2025/11/27', '%Y/%m/%d'),
('11/27/2025', '%m/%d/%Y'),
('27-Nov-2025', '%d-%b-%Y'),
('2025년 11월 27일', '%Y년 %m월 %d일'),
]
for date_str, fmt in formats:
dt = datetime.strptime(date_str, fmt)
print(f'{date_str} → {dt}')
timedelta: 시간 차이 계산 ⏱️
기본 사용법
from datetime import datetime, timedelta
# timedelta 생성
delta = timedelta(
days=7,
hours=3,
minutes=30,
seconds=45
)
print(delta) # 7 days, 3:30:45
print(f'총 초: {delta.total_seconds()}')
날짜 계산
from datetime import datetime, timedelta
now = datetime.now()
# 미래 날짜 계산
tomorrow = now + timedelta(days=1)
next_week = now + timedelta(weeks=1)
next_month = now + timedelta(days=30)
one_hour_later = now + timedelta(hours=1)
print(f'내일: {tomorrow}')
print(f'다음 주: {next_week}')
# 과거 날짜 계산
yesterday = now - timedelta(days=1)
last_week = now - timedelta(weeks=1)
print(f'어제: {yesterday}')
print(f'지난 주: {last_week}')
날짜 차이 계산
from datetime import datetime
# 두 날짜의 차이
birthday = datetime(1990, 5, 15)
now = datetime.now()
age_delta = now - birthday
print(f'살아온 일수: {age_delta.days}')
print(f'살아온 시간: {age_delta.total_seconds() / 3600:.0f}시간')
print(f'나이: {age_delta.days // 365}세')
시간대 (Timezone) 🌍
timezone 사용
from datetime import datetime, timezone, timedelta
# UTC 시간
utc_now = datetime.now(timezone.utc)
print(f'UTC: {utc_now}')
# 특정 시간대 (UTC+9, 한국)
kst = timezone(timedelta(hours=9))
kst_now = datetime.now(kst)
print(f'KST: {kst_now}')
# 시간대 변환
utc_time = datetime(2025, 11, 27, 14, 30, tzinfo=timezone.utc)
kst_time = utc_time.astimezone(kst)
print(f'UTC: {utc_time}')
print(f'KST: {kst_time}')
pytz 라이브러리 (더 정확한 시간대)
# pip install pytz 필요
try:
import pytz
from datetime import datetime
# 시간대 생성
seoul = pytz.timezone('Asia/Seoul')
new_york = pytz.timezone('America/New_York')
london = pytz.timezone('Europe/London')
# 현재 시간을 각 시간대로
now = datetime.now()
seoul_time = seoul.localize(now)
print(f'서울: {seoul_time}')
print(f'뉴욕: {seoul_time.astimezone(new_york)}')
print(f'런던: {seoul_time.astimezone(london)}')
except ImportError:
print('pytz 설치 필요: pip install pytz')
實踐範例 💡
예제 1: D-day 계산기
from datetime import datetime, date
def calculate_dday(target_date):
"""D-day 계산"""
if isinstance(target_date, str):
target_date = datetime.strptime(target_date, '%Y-%m-%d').date()
today = date.today()
delta = target_date - today
if delta.days > 0:
return f'D-{delta.days}'
elif delta.days == 0:
return 'D-Day!'
else:
return f'D+{abs(delta.days)}'
# 사용 예제
exam_date = '2025-12-25'
print(f'시험일: {calculate_dday(exam_date)}')
wedding_date = date(2025, 6, 15)
print(f'결혼식: {calculate_dday(wedding_date)}')
예제 2: 나이 계산기
from datetime import date
def calculate_age(birth_date):
"""만 나이 계산"""
if isinstance(birth_date, str):
birth_date = datetime.strptime(birth_date, '%Y-%m-%d').date()
today = date.today()
age = today.year - birth_date.year
# 생일이 안 지났으면 1살 빼기
if today.month < birth_date.month or \
(today.month == birth_date.month and today.day < birth_date.day):
age -= 1
return age
# 사용 예제
birth = '1990-05-15'
age = calculate_age(birth)
print(f'만 나이: {age}세')