개발/Python

Python dealing with time

아르카눔 2025. 4. 21. 09:43

파이썬에서 시간 다루기 

 

머신러닝에서 데이터 분석을 하거나, DB에서 매출을 합산한다거나, 로깅을 한다거나 여러가지 사정으로 시간을 기록할 일이 많아진다.

 

시간은 크게 2가지 형식으로 다루게 된다. 

 

  • Unix timestamp
  • yy-mm-dd hh:mm:ss.f 형태 

시간을 다루는 주요 패키지로는 아래와 같다.

 

  1. time
  2. datetime
  3. 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://codingdog.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-pytz%EB%A5%BC-%EA%B0%84%EB%8B%A8%ED%95%98%EA%B2%8C-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B3%A0-timezone-%EC%A0%95%EB%B3%B4%EB%A5%BC-%EA%B0%84%EB%8B%A8%ED%95%98%EA%B2%8C-%EA%B0%80%EC%A0%B8%EC%99%80-%EB%B4%85%EC%8B%9C%EB%8B%A4

https://docs.python.org/3/library/datetime.html

https://www.w3schools.com/python/python_datetime.asp

https://www.unixtimestamp.com/

https://wikidocs.net/135093

https://velog.io/@jcinsh/Python-Datetime-tutorial