금요일, 9월 23, 2016

[Python] Datetime을 활용한 날짜 처리


1. 개요
Python의 기본 모듈 중 하나인 Datetime을 활용해, 날짜 정보를 얻고 처리하는 방법을 살펴보도록 한다.

2. 날짜 정보 얻기
우선 Python 콘솔에 다음과 같이 입력하여 Datetime 모듈을 import한다.
>>> from datetime import datetime
그러면 now()라는 함수를 사용하여 현재 시간에 해당하는 객체를 받아올 수 있다.
>>> today = datetime.now()
>>> today
datetime.datetime(2018, 8, 15, 15, 53, 52, 616455)
>>> print(today)
2018-08-15 15:53:52.616455
이렇게 생성된 객체에 포함된 year, month, day, hour, minute, second 등을 통해 입맛대로 원하는 정보만 string 타입으로 가져올 수 있다.
>>> print('%s년 %s월 %s일, %s시 %s분 %s초' % (today.year, today.month, today.day, today.hour, today.minute, today.second))
2018년 8월 15일, 15시 53분 52초
반대로, 이러한 세부 정보를 직접 입력하여 특정 날짜에 대한 객체를 받아올 수도 있다.
>>> tomorrow = datetime(2018, 8, 16, 15, 53, 52, 616455)
>>> tomorrow
datetime.datetime(2018, 8, 16, 15, 53, 52, 616455)
>>> print(tomorrow)
2018-08-16 15:53:52.616455
만약 연, 월, 일 외에 시간 정보가 필요하지 않을 경우, date() 함수를 사용해 시간 정보가 삭제된 date 객체를 얻을 수 있다.
>>> today_date = today.date()
>>> today_date
datetime.date(2018, 8, 15)
>>> print(today_date)
2018-08-15
>>> tomorrow_date = tomorrow.date()
>>> tomorrow_date
datetime.date(2018, 8, 16)
>>> print(tomorrow_date)
2018-08-16

3. 날짜 연산하기
날짜 데이터를 연산하기 위해서 Datetime 모듈은 timedelta라는 객체를 제공한다. timedelta라는 것은 날짜 사이의 차이를 의미한다. 이 객체를 사용하기 위해서 다음과 같이 timedelta를 import한다.
>>> from datetime import datetime, timedelta
timedelta의 기본 단위는 날짜, 즉, day이다. 예를 들어, timedelta(3)은 3일의 차이를 의미한다.
>>> timedelta(3)
datetime.timedelta(3)
>>> print(timedelta(3))
3 days, 0:00:00
즉, 현재 날짜에 3일 뒤 날짜를 구하고자 한다면, 다음과 같이 코드를 작성하면 된다.
>>> today + timedelta(3)
datetime.datetime(2018, 8, 18, 15, 53, 52, 616455)
>>> print(today + timedelta(3))
2018-08-18 15:53:52.616455
만약 연산의 기준을 day가 아닌 시, 분, 초 등으로 설정하고 싶다면, timedelta를 생성할 때 인자로 hours, minutes, seconds 등을 사용하면 된다. 예를 들어, 현재 날짜로부터 3일 5시간 15분 30초 이후의 시간을 구하고 싶다면 다음과 같이 입력하면 된다.
>>> today + timedelta(days = 3, hours = 5, minutes = 15, seconds = 30)
datetime.datetime(2018, 8, 18, 21, 9, 22, 616455)
>>> print(today + timedelta(days = 3, hours = 5, minutes = 15, seconds = 30))
2018-08-18 21:09:22.616455
날짜에 timedelta를 더하는 것 외에, 날짜끼리의 연산도 가능하다. 다만, 사칙연산 중 뺄셈만 가능하다는 것을 주의해야 한다. 특정 날짜에서 다른 날짜를 빼면 timedelta 객체가 반환된다. 예를 들어, 내일에서 오늘을 빼면 하루의 차이가 나므로 timedelta(1)이 반환된다.
>>> tomorrow - today
datetime.timedelta(1)
>>> print(tomorrow - today)
1 day, 0:00:00
이때, 이 timedelta 객체는 방향성이 존재한다. 쉽게 말해서, timedelta 객체의 값이 음수 n이라면 특정 날짜보다 과거로 n의 시간만큼 차이가 난다는 의미이다.
즉, 오늘 날짜에서 내일 날짜를 빼면 timedelta(-1)이 반환된다.
>>> today - tomorrow
datetime.timedelta(-1)
>>> print(today - tomorrow)
-1 day, 0:00:00
이를 응용하면, 오늘로부터 1일 전의 날짜를 구할 수 있다.
>>> today + timedelta(-1)
datetime.datetime(2018, 8, 14, 15, 53, 52, 616455)
>>> print(today + timedelta(-1))
2018-08-14 15:53:52.616455
>>> today - timedelta(1)
datetime.datetime(2018, 8, 14, 15, 53, 52, 616455)
>>> print(today - timedelta(1))
2018-08-14 15:53:52.616455

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

댓글 없음:

댓글 쓰기