본문 바로가기
프로그래밍/Python

파이썬(python) 날짜 다루기 (feat. datetime)

by 부자 꽁냥이 2023. 3. 18.

파이썬(Python)에서는 datetime 모듈을 이용하여 특정 날짜의 연도, 월, 일을 계산한다거나 또는 날짜를 특정 형태로 문자열 변환하는 것이 가능하다. 이번 포스팅에서는 파이썬(Python) 내장 모듈인 datetime 모듈을 이용하여  날짜를 다루는 방법에 대해서 알아본다.


   datetime 사용법

1) date, time, datetime 객체

datetime 모듈에서 가장 기본이 되는 클래스는 date, time, datetime이다. 이에 대한 기본적인 생성 방법을 알아보자.

 

a. date 객체

date 객체는 기본적으로 연(year), 월(month), 일(day)을 입력 받는다.

 

import datetime

date = datetime.date(year=2022, month=10, day=4) ## 2022년 10월 4일
## 또는 datetime.date(2022, 10, 4)

 

b. time 객체

time 객체는 기본적으로 시(hour), 분(minute), 초(second)를 입력받는다.

 

import datetime

time = datetime.time(hour=5, minute=3, second=55) ## 5시 3분 55초
## 또는 datetime.time(5, 3, 55)

 

c. datetime 객체

datetime 객체는 date와 time 객체의 정보를 모두 받을 수 있다. 즉, 연, 월, 일, 시, 분, 초 정보를 입력받는다. datetime이 두 개가 있어서 헷갈릴 수 있는데 앞쪽 datetime은 모듈이고 뒤쪽이 datetime 객체를 나타낸다.

 

import datetime

## 2022년 10월 4일 14시 31분 43초
datetime1 = datetime.datetime(year=2022, month=10, day=4, 
                              hour=14, miniute=31, second=43) 
## 또는 datetime.datetime(2022, 10, 4, 14, 31, 43)

2) 날짜 정보 추출 및 수정

datetime 객체(date, time 도 포함)에서는 연, 월, 일, 시, 분, 초 정보를 추출할 수 있다. 또한 weekday 메서드를 이용하면 해당 날짜의 요일을 추출할 수 있다. 요일 정보는 정수로 나타내며 각 정수의 의미는 다음과 같다.

 

0 : 일요일, 1 : 월요일, 2 : 화요일, 3 : 수요일, 4 : 목요일, 5 : 금요일, 6 : 토요일

 

datetime1 = datetime.datetime(2022, 10, 4, 14, 31, 43)

print('datetime 객체 :', datetime1) 
print('연도 :', datetime1.year) ## 연
print('월 :', datetime1.month) ## 월
print('일 :', datetime1.day) ## 일
print('시 :', datetime1.hour) ## 시
print('분 :', datetime1.minute) ## 분
print('초 :', datetime1.second) ## 초

weekday_dict = {0:'일', 1:'월', 2:'화', 3:'수', 4:'목', 5:'금', 6:'토'}
print('요일 :', weekday_dict[datetime1.weekday()])

 

 

replace를 이용하면 '연월일시분초' 정보를 수정할 수 있다(속성에 직접 접근하여 수정할 수 없다!!). 방법은 replace에 수정하고자 하는 인자와 수정할 값을 전달하면 된다. replace는 수정된 결과를 가진 datetime 객체 사본을 생성하므로 원래의 객체로 바꾸고 싶다면 재할당을 해줘야 한다. 아래 코드는 기존 datetime 객체에서 연도는 2021, 시는 12로 수정한 것이다.

 

## 연도는 2021, 시는 12로 수정
datetime1 = datetime1.replace(year=2021, hour=12)

print(datetime1)

 


3) 날짜 연산

a. date와 time 객체 합치기 : combine

datetime 객체의 combine 메서드를 이용하면 date, time 객체를 하나로 합칠 수 있다.

 

date = datetime.date(year=2022, month=10, day=4) ## 2022년 10월 4일
time = datetime.time(hour=5, minute=3, second=55) ## 5시 3분 55초

## 2022년 10월 4일 5시 3분 55초 
datetime2 = datetime.datetime.combine(date, time)
print(datetime2)

 

 

b. 날짜에서 날짜 더하고 빼기

특정 날짜에서 20일 후, 3시간 전의 날짜 정보를 얻고 싶다면 timedelta 객체를 이용한다. 특정 날짜에서 20일 후를 계산하고 싶다면 timedelta(days=20)을 생성한 다음 기존 datetime 객체에 더해주면 된다. 과거 시점을 계산한다면 빼주면 된다. 아래 코드를 보면 이해하는데 도움이 된다.

 

datetime1 = datetime.datetime(2022, 10, 4, 5, 3, 55) ## 2022년 10월 4일 5시 3분 55초

print('20일 후 :', datetime1 + datetime.timedelta(days=20)) 
print('5분 후 :', datetime1 + datetime.timedelta(minutes=5)) 
print('10초 전 :', datetime1 - datetime.timedelta(seconds=10)) 
print('1시간 전 :', datetime1 - datetime.timedelta(hours=1))
print('1주 전 :', datetime1 - datetime.timedelta(weeks=1))

 

c. 두 날짜의 차이 계산하기

두 날짜의 차이를 계산할 때에는 두 datetime 객체를 빼주면 되고 그 결과는 timedelta 객체로 표현된다. 서로 다른 객체 간 차이는 계산이 안된다(예 : date와 datetime 객체간 차이).

 

datetime1 = datetime.datetime(2022, 10, 4, 5, 3, 55) ## 2022년 10월 4일 5시 3분 55초
datetime2 = datetime.datetime(2022, 11, 4, 13, 3, 22) ## 2022년 11월 4일 13시 3분 22초

print(datetime2-datetime1) ## timedelta 객체가 생성된다.

 


4) 문자형 변환

날짜를 특정 형식의 문자열로 바꾸거나 문자열에서 날짜 타입으로 변환하는 방법에 대해서 알아본다.

 

a. 문자열에서 날짜 타입으로 : strptime

strptime을 이용하면 날짜를 나타내는 문자열을 datetime 객체로 변환할 수 있다. strptime은 첫 번째 인자에는 문자열을 두 번째 인자에는 날짜 포맷을 포함하는 문자열 포맷을 지정한다. 문자열 포맷을 넘겨주는 이유는 strptime 메서드에게 해당 문자열에서 어느 부분이 연도이고 어느 부분이 분을 나타내는지 알려줘야 변환을 제대로 할 수 있기 때문이다. 날짜 포맷은 %기호로 구분되며 많이 사용되는 것은 다음과 같다. 

 

%Y : 4자리 연도, %m : 월, %d : 일, %H : 시, %M : 분, %S : 초

 

datetime 모듈은 다양한 날짜 포맷을 지원하는데 이에 대한 내용은 여기를 참고하기 바란다.

 

아래 코드는 '2022년 4월 18일 4시 14분 33초'를 의미하는 문자열을 datetime 객체로 변환한 것이다.

datetime_str = '2022-04-18 04:14:33' ## 2022년 4월 18일 4시 14분 33초
datetime1 = datetime.datetime.strptime(datetime_str, '%Y-%m-%d %H:%M:%S')

print('타입 :', type(datetime1))
print(datetime1)

 

 

b. 날짜를 문자열로 : strftime

strftime은 strptime의 반대 개념으로 날짜를 문자열로 바꿔준다. strftime은 날짜 포맷을 이용하여 원하는 형태의 문자열 포맷을 인자로 넘겨주면 된다.

 

datetime1 = datetime.datetime(2022, 10, 4, 5, 3, 55)

print('연-월-일 시:분:초 =', datetime1.strftime('%Y-%m-%d %H:%M:%S'))
print('연-월-일 =', datetime1.strftime('%Y-%m-%d'))

 


5) 기타 : 현재 시간

datetime 객체에서 now 메서드를 이용하면 현재 시간을 알 수 있다.

 

print(datetime.datetime.now())

 


댓글


맨 위로