자바스크립트가 비활성화 되어있습니다.
자바스크립트가 활성화 되어야 콘텐츠가 깨지지 않고 보이게 됩니다.
자바스크립트를 사용할수 있도록 옵션을 변경해 주세요.
- willbsoon

본문 바로가기
Python

python date 관련 모듈 정리하기

by willbsoon 2020. 9. 11.

1. 헷갈린다...

파이썬에서 작업을 하다보면 datetime, dateutil모듈이 존재한다. 이 모듈은 당연히 날짜, 시간 관련된 모듈이고 시간과 날짜를 관련해서 작업을 하려면 필수적으로 사용할수 밖에 없는 모듈들이다. 그냥 간편하게 스트링으로 처리하면 끝일텐데... 스트링으로 처리하기엔 어려운 문제들이 있어서 날짜 관련된 모듈을 쓸수밖에 없는 상황이있다.

하지만..... 너무 헷갈린다.

 

이건 java에서도 똑같았고, db에서도 마찬가지였고, 지금 파이썬에서도 똑같이 헷갈리는 어려움을 겪고있다.

그러니 시간관련한 모듈을 쓸때마다 구글링하고 시간을 버리게된다.

그러니 한번 정리를 하고 가자. 정리해도 안쓰면 헷갈리겠지만...ㅠ 그래도 정리해야 오래 기억에 남으니깐 해보자.

 

 

2. 본론

 

 

 

 

 1) date to string, string to date

요건 너무많이 쓰는 코드일것이다. 근데 안쓰면 까먹으니 다시 해보자.

간단하게 함수 하나 쓰면 해결된다. 

첫번째로 strftime() 함수를 쓰면 아래처럼 datetime 타입을 string 타입으로 변경할수 있다.

import datetime
today = datetime.datetime.now()
print(today)                      # 2020-09-11 13:55:25.293244
print(today.strftime("%Y,%m,%d")) # 2020,09,11
print(today.strftime("%y-%m-%d")) # 20-09-11

포맷에 대한 정보는 여기서 확인하자.

 

두번째로 string to date이다.

import datetime

date_string = '2020-09-11'
date_date = datetime.datetime.strptime(date_string,"%Y-%m-%d")

print(date_date)        # 2020-09-11 00:00:00
print(type(date_date))  # <class 'datetime.datetime'>

오늘 날짜의 string 타입을 datetime 타입으로 변경되어진 것을 볼수 있다.

 

 2) 날짜 변경

날짜를 특정 날짜로 변경해야할 때가 있다.

이런경우는 string으로 변경해도 되긴 하는데 제공해주는 메소드가 있으니 한번 써보자

 

첫번째 특정날짜로 변경하기

import datetime

myDate = datetime.datetime.strptime('2020-09-11 14:01:37', '%Y-%m-%d %H:%M:%S')
print(myDate)    # 2020-09-11 14:01:37

yourDate = myDate.replace(day=1)
print(myDate)    # 2020-09-11 14:01:37
print(yourDate)  # 2020-09-01 14:01:37

replace 함수를 쓰니 yourDate가 1일로 변경된것을 확인할수 있다.

 

두번째는 몇시간 후, 몇일 후 로 변경해야하는 경우다.

날짜는 30일, 31일과 같이 월별로 말일이 다르다보니 이것을 깡으로 코딩하려면 몇십줄을 써야할것이다.

이런 번거러움을 해결하기 위해 datetiem에 연산을 써보자

 

import datetime

now = datetime.datetime.now()
print(now)        # 2020-09-11 14:21:00.764525

tomorrow = now + datetime.timedelta(days=1, hours=2)
print(tomorrow)   # 2020-09-12 16:21:00.764525

term = tomorrow - now
print(term, type(term))        # 1 day, 2:00:00 <class 'datetime.timedelta'>
print(term.days, term.seconds, term.microseconds)   # 1 7200 0

 

여기서 datetime.timedelta 모듈이 사용되는데 위에서 보는것처럼 days, months 등 더하거나 빼고싶은 값을 넣어서 객체끼리 더하거나 빼는 연산을 해주면 연산에 대한 새로운 datetime 객체가 나오게 된다.

그리고 timedelta 객체는 days, seconds, microseconds 속성이있는데 이는 날짜 단위, 시간단위, 밀리세컨단위를 일, 초, 밀리세컨 값으로 나타내준다. 

 

이렇게만 알고있어도 왠만한 모든 날짜 연산은 해결 가능하다~!

그러니 헷갈리지 말자.

 

 

 

 

 

 3) 마지막으로 dateutil 패키지~!

strptime() 메서드 같은 경우는 형식문자열을 사용자가 제공해야한다. 그러나 dateutil 패키지의 parse 함수는 형식문자열을 자동으로 찾아서 객체로 만들어준다. 다만 포맷을 맘대로 바꿔버리면 못 찾을수도있다. 만능이 아니니 속편히 위의 strptime 메서드를 쓰는게 좋을듯 한다.

 

from dateutil.parser import parse

print(parse('2020-09-11 3:00'))  # 2020-09-11 03:00:00
print(type(parse('2020-09-11 0:21:00.764525')))  # <class 'datetime.datetime'>
print(parse("Apr 16, 2020 04:05:32 PM"))  # 2020-04-16 16:05:32

 

 

 

3. 결론

 

 

 

오늘의 결론!

잊지말자...

 

 

 

 

 

댓글