Python에서 날짜는 기본 자료형이 아니지만 시계열 데이터를 다루는데 빠질 수 없는 자료입니다.
datetime 패키지는
datetime, time, timedelta 클래스를 제공합니다.
datetime 패키지에는 패키지명과 같은 클래스(datetime)가 있음에 주의해야합니다.
datetime을 이용해 현재 시각을 알아보겠습니다.
import datetime
time_now = datetime.datetime.now()
print(time_now)
datetime.datetime 클래스로부터 만들어진 time_now를 통해
연도, 월, 일, 시, 분, 초, 마이크로초를 알아낼 수 있습니다.
import datetime
time_now = datetime.datetime.now()
print(time_now.year)
print(time_now.month)
print(time_now.day)
print(time_now.hour)
print(time_now.minute)
print(time_now.microsecond)
또 다른 weekday(),date(),time()과 같은 메소드들도 존재합니다.
import datetime
time_now = datetime.datetime.now()
print(time_now.weekday()) # 0:월, 1:화, 2:수, 3:목, 4:금, 5:토, 6:일
print(time_now.date()) # 날짜만 가져오기 (시간 X)
print(time_now.time()) # 시간만 가져오기 (날짜 X))
그중에서도 strftime이라는 메소드를 많이 사용합니다.
time_now는 datetime.datetime의 인스턴스라 불편한 점이 있을 수 있습니다.
print(type(time_now)) # <class 'datetime.datetime'>
예를 들면 dictionary에 날짜별로 데이터를 넣었는데 단순히 str을 전달하면 datetime이 아니므로 찾지 못합니다.
이런 상황에서 필요한 것이 str로 바꿔주는 strftime 메소드입니다.
import datetime
time_now = datetime.datetime.now()
print(type(time_now)) # <class 'datetime.datetime'>
print(time_now.strftime("%A %d. %B %Y")) #Friday 24. January 2020
print(type(time_now.strftime("%A %d. %B %Y"))) # <class 'str'>
str 타입으로 변환과정에서 변환 포맷을 지정할 수 있는데 이때 필요한게 지정문자 (%A %d %B %Y와 같은)입니다.
이 지정문자에 대해서는
https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior
공식문서에 잘 나와 있습니다.
다음은 dateutil 패키지에 대한 내용입니다.
이 dateutil 패키지에 있는 parse를 사용하면 날짜 형식을 대충 넣어도 datetime.datetime 객체로 잘 바꿔줍니다.
무슨 말이냐면
import datetime
time_set = datetime.datetime(2020,1,01) # 0넣으면 안됨, 에러
time_set2 = datetime.datetime(2020,1,1)
print(time_set)
datetime.datetime를 만들 때는 지정한 형식대로 인자를 전달해야 합니다.
하지만 parse를 이용하면 대충해도 알아서 잘 만듭니다
import datetime
from dateutil.parser import parse
time_set = parse('2020-1-01') #가능
time_set2 = datetime.datetime(2019,1,1) #가능
time_set3 = parse('11-11-2020') #가능
다음은 datetime 객체끼리의 연산, timedelta 사용법입니다.
기준일로부터 특정일이 얼마나 지났나와 같은 연산을 할 때 사용하는 클래스입니다.
import datetime
time1 = datetime.datetime(2020, 1, 1, 1)
time2 = datetime.datetime(2020, 1, 24, 13)
diff = time2 - time1
print(diff) # 23 days, 12:00:00
print(type(diff)) # <class 'datetime.timedelta'>
datetime, time1과 time2의 차이를 구하기 위해 (-) 연산을 하면 정말 며칠, 몇시간 차이인지 나옵니다.
이 차이를 구한 diff는 datetime.timedelta의 인스턴스입니다.
이 datetime.timedelta의 인스턴스가 사용할 수 있는 기본 메소드들이 있습니다.
예를 들어 날짜만 알고 싶다. 초만 알고 싶다고 하면 아래와 같이 days(), seconds()와 같은 메소드를 호출하면 됩니다.
import datetime
time1 = datetime.datetime(2020, 1, 1, 1)
time2 = datetime.datetime(2020, 1, 24, 13)
diff = time2 - time1
print(diff) # 23 days, 12:00:00
print(type(diff)) # <class 'datetime.timedelta'>
print(diff.days) # 23
print(diff.seconds) # 43200
print(diff.total_seconds()) # 2030400.0
반대로 특정일을 기준으로 며칠, 몇초가 지난 후의 시간을 알고 싶다고 하면 (+)을 사용하면 됩니다.
다만 이 연산에서는 위의 (-)와 다르게 datetime.datetime 객체끼리의 연산이 아니라
datetime.datetime와 datetime.timedelta 사이의 연산이어야합니다.
이에 대한 코드를 첨부합니다.
import datetime
time1 = datetime.datetime(2020, 1, 1, 1)
time2 = datetime.timedelta(days=23, seconds=3600)
sum = time2 + time1
print(sum) #2020-01-24 02:00:00
'파이썬 > 기초문법' 카테고리의 다른 글
Python ==과 is의 차이 (0) | 2020.02.12 |
---|---|
Relative imports in Python 3 (0) | 2020.02.02 |
Multiprocessing vs. Threading in Python: What Every Data Scientist Needs to Know (0) | 2020.01.30 |
Python NumPy 배열 기초 (0) | 2020.01.24 |
Python self 이해하기 (2) | 2020.01.23 |
댓글