파이썬에서 시간 다루기
머신러닝에서 데이터 분석을 하거나, DB에서 매출을 합산한다거나, 로깅을 한다거나 여러가지 사정으로 시간을 기록할 일이 많아진다.
시간은 크게 2가지 형식으로 다루게 된다.
- Unix timestamp
- yy-mm-dd hh:mm:ss.f 형태
시간을 다루는 주요 패키지로는 아래와 같다.
- time
- datetime
- pytz
1. time
Unix timestamp를 생성한다.
유닉스 타임스탬프란 1970년 1월 1일 00:00:00초 (UTC 0)을 기준으로 몇 초가 지나갔는지를 표시한 시간 표현법이다.
import time
ct = time.time()
print(ct)
>> 1745195940.8100421
2. datetime
우리에게 익숙한 시간 형태다.
연-월-일 시:분:초.마이크로초 (yy-mm-dd hh:mm:ss.f )
로 시간을 표시한다.
기본 사용법
기본적인 현재 시간 혹은 연, 월, 일을 직접 입력해서 생성하는 방식은 다음과 같다.
from datetime import datetime
x = datetime.now()
print(x)
>> 2025-04-21 09:32:40.656855
x = datetime(2020, 5, 17)
print(x)
>> 2020-05-17 00:00:00
시간 특성 뽑아내기
datetime은 연, 월, 일, 시간, 분, 초, 월, 요일을 뽑아낼 수 있다.
x = datetime(2020, 5, 17) # 2020-05-17 00:00:00
print(x.year)
>> 2020
print(x.month)
>> 5
print(x.day)
>> 17
print(x.hour)
>> 0
print(x.minute)
>> 0
print(x.second)
>> 0
print(x.strftime("%B"))
>> May
print(x.strftime("%A"))
>> Sunday
timedelta
시간 차이를 나타내는 객체로 days, seconds, microseconds를 속성으로 갖는다.
며칠, 몇시간, 몇분, 몇초가 차이 나는지 알아서 계산해준다.
x = datetime(2020, 5, 17, 12, 30, 45)
y = datetime(2020, 5, 17, 13, 00, 15)
print(x)
print(y)
print(y - x)
>>
2020-05-17 12:30:45
2020-05-17 13:00:15
0:29:30
x = datetime(2020, 5, 17)
y = datetime(2020, 6, 1)
print(y - x)
>>
15 days, 0:00:00
y = datetime(2022, 6, 1)
dt = y - x
print(dt)
print( dt.days, dt.seconds, dt.microseconds)
>>
745 days, 0:00:00
745 0 0
From unix timestamp to datetime
time으로 구한 유닉스 시간을 우리에게 익숙한 yy-mm-dd hh:mm:ss.f 형태로 변환한다.
unix_to_epoch = datetime.fromtimestamp(ct)
print(unix_to_epoch)
>> 2025-04-21 09:39:00.810042
From string to datetime
문자열 형태의 날짜를 datetime 객체 형태로 변환하는 방법이다.
print(datetime.fromisoformat('2011-11-04'))
>> 2011-11-04 00:00:00
print(datetime.fromisoformat('2011-11-04T00:05:23'))
>> 2011-11-04 00:05:23
print(datetime.fromisoformat('2011-11-04 00:05:23.283'))
>> 2011-11-04 00:05:23.283000
print(datetime.fromisoformat('2011-11-04 00:05:23.283+00:00'))
>> 2011-11-04 00:05:23.283000+00:00
print(datetime.fromisoformat('2011-11-04T00:05:23+04:00'))
>> 2011-11-04 00:05:23+04:00
From datetime to various time formats
datetime 객체를 유닉스 시간, isoformat, yy-mm-dd나 dd/mm/yy, 요일 일 월 년 등등 여러가지 형태로 변환하는 방법이다.
d = datetime(2023, 2, 13, 10, 24, 00)
print(d.timestamp()) #unix timestamp
>> 1676251440.0
print(d.isoformat())
>> 2023-02-13T10:24:00
print(d.strftime("%d/%m/%y"))
>> 13/02/23
print(d.strftime("%y-%m-%d"))
>> 23-02-13
print(d.strftime("%A %d. %B %Y"))
>> Monday 13. February 2023
print(d.ctime())
>> Mon Feb 13 10:24:00 2023
3. pytz
timezone 시간대를 이용하는 방법이다.
한국표준시 KST는 UTC+9이므로 이를 이용하면 된다.
unix_to_epoch_utc = datetime.fromtimestamp(ct, tz=pytz.utc)
print(unix_to_epoch_utc)
>> 2025-04-21 00:39:00.810042+00:00
unix_to_epoch_kst = datetime.fromtimestamp(ct, tz=pytz.utc).astimezone(pytz.timezone('Asia/Seoul'))
print(unix_to_epoch_kst)
>> 2025-04-21 09:39:00.810042+09:00
>>
datetime.datetime(2025, 4, 21, 10, 22, 56, 353368, tzinfo=<DstTzInfo 'Asia/Seoul' KST+9:00:00 STD>)
References:
https://docs.python.org/3/library/datetime.html
https://www.w3schools.com/python/python_datetime.asp
https://www.unixtimestamp.com/
https://velog.io/@jcinsh/Python-Datetime-tutorial
'개발 > Python' 카테고리의 다른 글
Python의 sorted 함수 (0) | 2025.02.19 |
---|---|
파이썬의 여러 가상환경 비교 (0) | 2024.08.03 |
Anaconda와 가상 환경 관리 (0) | 2024.08.01 |
파이썬의 None과 NaN (0) | 2024.07.12 |