건프의 소소한 개발이야기

[Python] 날짜객체 정리하기 - datetime, time 본문

개발 이야기/Python 이야기

[Python] 날짜객체 정리하기 - datetime, time

건강한프로그래머 2017. 7. 28. 14:28

안녕하세요, 건프입니다.


데이터를 모으는 크롤링 작업을 할 때, 주식데이터와 같은 시계열 데이터를 다룰 때, 날짜객체들을 계속 다뤄야 하는데

기억력이 부족한 저는 사용할 때 마다 검색하는게 한심해서 아에 정리를 하고 넘어가려고 합니다.


누군가에게 도움이 될 정리가 되기를 바랍니다.


1. 일단 저는 time 객체와 datetime 객체만 사용합니다.

import time
from datetime import datetime, timedelta

timestamp_now = time.time() # timestamp 형식으로 현재 시간 알아오기
print(timestamp_now)
datetime_now = datetime.now() # datetime 형식으로 현재 시간 알아오기
print(datetime_now)


우선 time 객체는 timestamp 형식으로 출력을 하고

datetime 객체는 timestamp 의 값을 우리가 보기 편한 yyyy-mm-dd 의 형식으로 바꿔보는 역할을 수행하게 됩니다.


결과 : 

>> python test.py

1501219142.348125                # timestamp 형식

2017-07-28 14:19:02.348170 # datetime 형식


2. datetime 객체 속의 timedelta 객체를 이용하면, 날짜를 거슬러 올라가거나, 미래값을 찾아가기 편리하다.

import time
from datetime import datetime, timedelta

timestamp_now = time.time() # timestamp 형식으로 현재 시간 알아오기
print(timestamp_now)
datetime_now = datetime.now() # datetime 형식으로 현재 시간 알아오기
print(datetime_now)

delta_datetime = timedelta(days=-365) # timedelta 는 datetime 형식으로 결과를 내뱉는다
print(datetime_now + delta_datetime) # -3 자체가 포함된 것이므로, 둘을 더해야 뺀 결과가 나온다


결과 : 

>> python test.py

1501219272.672687

2017-07-28 14:21:12.672729

2016-07-28 14:21:12.672729   # 1년전 으로 시간을 돌린 timedelta 객체를 더했으므로, 1년 전 datetime 값을 얻을 수 있다.



3. datetime 객체 를 timestamp 형식으로 바꾸기

datetime -> timestamp

import time
from datetime import datetime, timedelta

timestamp_now = time.time() # timestamp 형식으로 현재 시간 알아오기
print(timestamp_now)
datetime_now = datetime.now() # datetime 형식으로 현재 시간 알아오기
print(datetime_now)

delta_datetime = timedelta(days=-365) # timedelta 는 datetime 형식으로 결과를 내뱉는다
print(datetime_now + delta_datetime) # -3 자체가 포함된 것이므로, 둘을 더해야 뺀 결과가 나온다

end_datetime = datetime_now + delta_datetime

end_timestamp = time.mktime(end_datetime.timetuple()) # datetime 형식 -> timestamp 형식


time.mktime(datetime.timetuple()) 형식으로 사용합니다.


4. timestamp 형식을 datetime 으로 바꾸기

timestamp -> datetime

import time
from datetime import datetime, timedelta

timestamp_now = time.time() # timestamp 형식으로 현재 시간 알아오기
print(timestamp_now)
datetime_now = datetime.now() # datetime 형식으로 현재 시간 알아오기
print(datetime_now)

delta_datetime = timedelta(days=-365) # timedelta 는 datetime 형식으로 결과를 내뱉는다
print(datetime_now + delta_datetime) # -3 자체가 포함된 것이므로, 둘을 더해야 뺀 결과가 나온다

end_datetime = datetime_now + delta_datetime

end_timestamp = time.mktime(end_datetime.timetuple()) # datetime 형식 -> timestamp 형식

print(timestamp_now)
print(datetime.fromtimestamp(timestamp_now)) # timestamp 형식 -> datetime 형식
print(end_timestamp)
print(datetime.fromtimestamp(end_timestamp))

datetime.fromtimestamp() 함수를 이용합니다.



시계열 데이터를 다룸에 있어서 사람에게 친숙한 형태는 datetime 형태인데

서로 다른 언어, 서로 다른 시간대에 있는 데이터를 다룸에 있어서는 통일된 timestamp 방식이 효율적일 경우가 많습니다.


어떤 것을 사용하느냐는 프로그램이 동작하는 환경과 상황과 프로그래머의 판단에 따라 다르겠지만,

서로간에 변환을 자유자재로만 할 수 있으면 큰 문제가 있지는 않습니다. 


실전에서 겪었던 문제들을 정리해둡니다.


누군가에게 도움이 되었길 바랍니다. 

감사합니다.

Comments