Python datetime 마스터하기: 날짜, 시간, 타임존 실전 가이드
Python datetime 마스터하기
실습 예제와 명확한 설명으로 Python에서 날짜와 시간 다루기 알아보기.
동영상: Python datetime – 날짜와 시간 다루기
Python datetime 모듈은 날짜/시간 조작 강력한 도구 제공. 현재 시점 조회부터 포맷팅, 타임존 처리까지 일반적인 작업 안내.
예제 1: 현재 날짜와 시간 얻기
import datetime
datetime_object = datetime.datetime.now()
print(datetime_object)
출력 예시:
2018-12-19 09:26:03.478039
import datetime으로 모듈 임포트. datetime 클래스에 now() 메서드로 지역 날짜/시간 반환.
예제 2: 현재 날짜 얻기
import datetime
date_object = datetime.date.today()
print(date_object)
출력:
2018-12-19
date 클래스 today()로 현재 캘린더 날짜 획득.
datetime 모듈 탐색
dir(datetime)로 모든 속성/클래스 나열:
import datetime
print(dir(datetime))
출력:
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_divide_and_round', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'timezone', 'tzinfo']
핵심 클래스: date, time, datetime, timedelta.
datetime.date 클래스
date 클래스는 캘린더 날짜(년, 월, 일) 표현.
예제 3: 날짜 객체 생성
import datetime
d = datetime.date(2019, 4, 13)
print(d)
결과:
2019-04-13
date() 생성자는 year, month, day 인수 받음. 변수 a는 date 인스턴스.
date 클래스만 임포트:
from datetime import date
a = date(2019, 4, 13)
print(a)
예제 4: 현재 날짜
클래스메서드 today() 사용:
from datetime import date
today = date.today()
print("Current date =", today)
예제 5: 타임스탬프에서 변환
유닉스 타임스탬프는 1970-01-01 UTC 이후 초. fromtimestamp()로 변환:
from datetime import date
timestamp = date.fromtimestamp(1326244364)
print("Date =", timestamp)
출력:
Date = 2012-01-11
예제 6: 년/월/일 접근
from datetime import date
today = date.today()
print("Current year:", today.year)
print("Current month:", today.month)
print("Current day:", today.day)
datetime.time
time 클래스는 날짜 없는 시각 저장.
예제 7: 시간 객체 생성
from datetime import time
a = time()
print("a =", a)
b = time(11, 34, 56)
print("b =", b)
c = time(hour=11, minute=34, second=56)
print("c =", c)
d = time(11, 34, 56, 234566)
print("d =", d)
결과:
a = 00:00:00 b = 11:34:56 c = 11:34:56 d = 11:34:56.234566
예제 8: 시간 구성요소 검사
from datetime import time
a = time(11, 34, 56)
print("hour =", a.hour)
print("minute =", a.minute)
print("second =", a.second)
print("microsecond =", a.microsecond)
출력:
hour = 11 minute = 34 second = 56 microsecond = 0
datetime.datetime
datetime 클래스는 날짜와 시간 정보 결합.
예제 9: datetime 객체 생성
from datetime import datetime
# 년, 월, 일
A = datetime(2018, 11, 28)
print(A)
# 전체 지정
B = datetime(2017, 11, 28, 23, 55, 59, 342380)
print(B)
결과:
2018-11-28 00:00:00 2017-11-28 23:55:59.342380
년/월/일 필수; 시/분/초/마이크로초 기본 0.
예제 10: 구성요소 & 타임스탬프 검사
from datetime import datetime
A = datetime(2017, 11, 28, 23, 55, 59, 342380)
print("year =", A.year)
print("month =", A.month)
print("day =", A.day)
print("hour =", A.hour)
print("minute =", A.minute)
print("timestamp =", A.timestamp())
출력:
year = 2017 month = 11 day = 28 hour = 23 minute = 55 timestamp = 1511913359.34238
datetime.timedelta
timedelta 객체는 두 날짜/시간 간 기간 표현.
예제 11: 날짜/시간 간 차이
from datetime import datetime, date
T1 = date(year=2018, month=7, day=12)
T2 = date(year=2017, month=12, day=23)
T3 = T1 - T2
print("T3 =", T3)
T4 = datetime(year=2018, month=7, day=12, hour=7, minute=9, second=33)
T5 = datetime(year=2019, month=6, day=10, hour=5, minute=55, second=13)
T6 = T4 - T5
print("T6 =", T6)
print("type of T3 =", type(T3))
print("type of T6 =", type(T6))
출력:
T3 = 201 days, 0:00:00 T6 = -333 days, 1:14:20 type of T3 = <class 'datetime.timedelta'> type of T6 = <class 'datetime.timedelta'>
예제 12: timedelta 객체 빼기
from datetime import timedelta
T1 = timedelta(weeks=2, days=5, hours=1, seconds=33)
T2 = timedelta(days=4, hours=11, minutes=4, seconds=54)
T3 = T1 - T2
print("T3 =", T3)
출력:
T3 = 14 days, 13:55:39
예제 13: 음수 timedelta
from datetime import timedelta
T1 = timedelta(seconds=33)
T2 = timedelta(seconds=54)
T3 = T1 - T2
print("T3 =", T3)
print("abs(T3) =", abs(T3))
출력:
T3 = -1 day, 23:59:39 abs(T3) = 0:00:21
예제 14: timedelta 총 초
from datetime import timedelta
T = timedelta(days=5, hours=1, seconds=33, microseconds=233423)
print("total seconds =", T.total_seconds())
출력:
total seconds = 435633.233423
날짜 더하기, timedelta 숫자 곱하기/나누기로 기간 스케일링 가능.
날짜 포맷팅과 파싱
로케일마다 날짜 포맷 다름(미국 mm/dd/yyyy vs 영국 dd/mm/yyyy). Python strftime()과 strptime()으로 datetime 객체와 포맷 문자열 간 변환.
Python strftime() – datetime을 문자열로
from datetime import datetime
now = datetime.now()
# 시:분:초
T = now.strftime("%H:%M:%S")
print("time:", T)
# 미국 포맷
S1 = now.strftime("%m/%d/%Y, %H:%M:%S")
print("S1:", S1)
# 영국 포맷
S2 = now.strftime("%d/%m/%Y, %H:%M:%S")
print("S2:", S2)
일반적 출력:
time: 04:34:52 S1: 12/26/2018, 04:34:52 S2: 26/12/2018, 04:34:52
자주 쓰는 포맷 코드: %Y 년, %m 월, %d 일, %H 시, %M 분, %S 초.
Python strptime() – 문자열을 datetime으로
from datetime import datetime
date_string = "21 June, 2018"
print("date_string =", date_string)
date_object = datetime.strptime(date_string, "%d %B, %Y")
print("date_object =", date_object)
출력:
date_string = 21 June, 2018 date_object = 2018-06-21 00:00:00
%d 일, %B 전체 월 이름, %Y 년.
타임존 인식
다른 존에서 시간 표시/계산 필요 앱이면 수동 계산 피하고 pytz 라이브러리 사용.
from datetime import datetime
import pytz
local = datetime.now()
print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S"))
tz_NY = pytz.timezone('America/New_York')
dt_NY = datetime.now(tz_NY)
print("NY:", dt_NY.strftime("%m/%d/%Y, %H:%M:%S"))
tz_London = pytz.timezone('Europe/London')
dt_London = datetime.now(tz_London)
print("London:", dt_London.strftime("%m/%d/%Y, %H:%M:%S"))
샘플 출력:
Local: 12/20/2018, 13:10:44 NY: 12/20/2018, 08:10:44 London: 12/20/2018, 13:10:44
datetime_NY와 datetime_London 객체는 타임존 인식 타임스탬프 포함.