파이썬에서 날짜와 시간 다루는 방법(입력,더하기,비교 등)

2021. 11. 16. 10:02

날짜는 파이썬에서 많이 사용하는 데이터 타입 중 하나이다. 오픈API를 이용하여 데이터를 제공받을 때, 보통 기본 값으로 날짜를 입력한다. 그래서 날짜를 잘 활용하면 데이터를 자동으로 받아올 수 있도록 할 수 있다.


하지만 컴퓨터에서 날짜를 계산하는 것은 조금 복잡하다. 예를 들어 2018년 5월 31일을 정수로 표현하면 20180531이 되는데, 여기서 하루가 지나면 20180601이 되야 한다. 그냥 1을 더하면 20180532이므로, 날짜의 특성에 맞는 계산이 필요하다.


날짜와 시간 연산은 이런 특수성이 있어 대개 날짜와 시간을 다루는 함수나 패키지가 제공이 된다. 오늘은 파이썬에서 날짜와 시간을 다루는 방법(입력, 더하기, 비교 등)에 대해서 알아보려고 한다.

 

 

날짜와 시간

 

 

1. 날짜 다루기

날짜와 시간을 다루는 패키지는 datetime패키지이다. datetime패키지에는 datetime이라는 데이터 유형이 있는데 날짜와 시간을 둘 다 다루는 데이터 유형이다.


현재 시각을 알고 싶다면 now()라는 함수를 호출하면 된다. 컴퓨터의 내장된 시계를 기준으로 현재 년, 월, 일, 시, 분, 초, 마이크로초를 보여준다.

import datetime
datetime.datetime.now()

[출력]: datetime.datetime(2018, 5, 9, 7, 26, 48, 319658)

 

년, 월, 일, 시, 분, 초 각각의 값을 추출할 수도 있다.

now=datetime.datetime.now()
now.year, now.month, now.day

[출력] (2018, 5, 9)


now.hour, now.minute, now.second

[출력] (7, 28, 29)

 

datetime()함수를 이용해서 원하는 특정날짜의 값도 datetime 데이터 유형으로 만들 수 있다.

pre=datetime.datetime(2018,4,1)
pre.year, pre.month, pre.day

[출력] (2018, 4, 1)

 


datetime은 비교 연산도 가능하다. 위에서 저장한 2개의 날자를 비교했더니, 최근에 날짜가 더 큰 것으로 나왔다.

now > pre

[출력] True

 

 

2. 기간 다루기

기간을 표현하기 위해서는 timedelta 데이터 유형을 사용한다. 일수와 시간을 저장한 뒤에 값을 확인해보았다. hours와 minutes로는 회신 받을 수 없고, 날짜와 초로 값을 확인할 수 있다.

period = datetime.timedelta(days=5, hours=5, minutes=5, seconds=10)
period.days,period.seconds

[출력] (5, 18310)

 

string으로 변환하니 사람이 확인하기 더 쉬운 형태로 출력해 주었다.

str(period)

[출력] '5 days, 5:05:10'

 

 

3. 날짜 계산하기

이제 30일 후의 날짜를 계산해보자. timedelta에는 year와 month라는 매개변수가 없다. 년과 월은 어떤 년도와 월인지에 따라서 각각 길이가 다르기 때문이다. 년과 월을 계산하는 방법은 포스팅 하단에서 다룰 relativedelta 이용하면 된다.

 

datetime과 timedelta를 더해서 원하는 30일 뒤에 날짜와 시간을 구했다. timedelta 유형은 더하기, 빼기, 곱하기, 나누기도 가능하다.

days_30=datetime.timedelta(days=30)
now+days_30

[출력] datetime.datetime(2018, 6, 8, 7, 28, 29, 846963)

 

 

4. 날짜를 문자열로 바꾸기

datetime객체는 날짜와 시간을 연산하기에는 좋으나, 편집을 위해서 날짜와 시간을 string으로 활용할 때도 많다. strftime()메소드를 사용하면 datetime을 문자열로 나타낼 수 있다.

 

* strftime의 날짜와 시간을 나타내는 문자열

%Y 세기를 포함한 연도, 2018
%y 세기를 포함하지 않은 연도, 18
%m 월, 01~12
%B 월 이름, October
%b 약식 월 이름, Oct
%d 일자, 01~31
%j 365일 기준 일자 001~365
%w 요일, 0: 일요일 ~ 6: 토요일
%A 요일 이름, Sunday
%a 약식 요일 이름, Sun
%H 시, 00~23
%I 시, 01~12
%p 오전: AM, 오후: PM
%M 분, 00~59
%S 초, 00~59

 


위에 문자열을 활용하여 날짜와 시간을 string으로 표시해보았다.

s_day=datetime.datetime(2018,4,1,13,30,0)
s_day.strftime('%Y/%m/%d %H:%M:%S')

[출력] '2018/04/01 13:30:00'

 

 

5. 문자를 datetime 타입으로 바꾸기

string(문자열)을 datetime 객체로 변환할 수도 있는데, strptime() 메소드를 이용하면 된다. p는 parse를 뜻한다고 한다.

datetime.datetime.strptime('20171011','%Y%m%d')

[출력] datetime.datetime(2017, 10, 11, 0, 0)

 

 

6. 년, 월 단위로 문자열 계산하기

년, 월 단위 계산을 쉽게 하기 위해서는 dateutil이라는 패키지가 필요하다. 터미널에서 다음과 같이 실행하면, pip install python-dateutil 쉽게 설치할 수 있다.

 

relativedelta함수를 이용해서, 년월 계산을 쉽게 할 수 있다. 사용방법은 timedelta함수와 동일하다. 아래와 같이 현재 날짜에서 3개월 뒤의 날자를 구해보았다.

from dateutil.relativedelta import relativedelta

dif_3m = relativedelta(months=3)
now_3m = now - dif_3m

 

 

7. 일정시간 정지하기

추가로 time.sleep() 함수를 이용하면 입력한 초만큼 일시정지할 수 있다.

import time

time.sleep(10)

 

 

datetime, timedelta

 

 

오늘은 이렇게 파이썬에서 날짜와 시간을 다루는 방법에 대해서 알아보았다. 파이썬에 내장된 datetime과 timedelta 모듈로 쉽게 해 볼 수 있었다. 년과 월 계산이 필요하다면 dateutil 패키지를 이용하는 것이 좋다.

 

판다스 데이터 프레임에서 날짜와 시간을 다루는 방법은 조금 다르다. 판다스 데이터프레임에서 날짜와 시간을 다루는 방법도 다음 포스팅에서 다뤄보도록 하겠다.

댓글()