본문 바로가기
Developer/Python

Python 날짜, 시간 계산 방법 (오늘, 어제, 한달 전, 일년 전, 내일, 한달 후, 일년 후, 날짜 시간 더하기, 날짜 시간 빼기)

by 김씩씩 2021. 1. 9.

Python 날짜 계산 방법 (오늘, 마이크로초 전, 밀리초 전, 몇초 전, 어제, 일주일 전, 한달 전, 일년 전, 마이크로초 후, 밀리초 후, 몇초 후, 내일, 일주일 후, 한달 후, 일년 후, 날짜 더하기, 날짜 빼기, 두 날짜 차이, 시간 더하기, 시간 빼기)

 

Python에서 날짜와 시간 계산하는 방법을 알려드리도록 하겠습니다.

 

 

먼저 지금 날짜와 시간을 구하는 방법입니다.

from datetime import datetime

now = datetime.now()
print("현재 :" , now)

# 출력
# 현재 : 2021-01-09 19:25:02.942687

Python에서 원하는 시간 전, 혹은 원하는 시간 후 를 구하는 방법은 두가지 방법이 있습니다.

방법은 비슷한데 사용하는 라이브러리가 다르고 그에 따라 계산할 수 있는 것이 다르다고 말씀드리는게 더 맞을 것 같습니다.

그럼 하나씩 보여드리면서 차이를 말씀드리겠습니다.

 

datetime.timedelta 를 사용하는 방법.

마이크로초, 밀리초, 초, 분, 시간, 일, 주를 원하는 만큼 더하고 빼는 방법입니다.

from datetime import datetime, timedelta

now = datetime.now()
print("현재 :" , now)	# 현재 : 2021-01-09 19:41:03.645702

before_one_microsecond = now - timedelta(microseconds=1)
print("1마이크로초 전 :", before_one_microsecond) # 1마이크로초 전 : 2021-01-09 19:41:03.645701
after_one_microsecond = now + timedelta(microseconds=1)
print("1마이크로초 후 :", after_one_microsecond)	# 1마이크로초 후 : 2021-01-09 19:41:03.645703

before_one_millisecond = now - timedelta(milliseconds=1)
print("1밀리초 전 :", before_one_millisecond)	# 1밀리초 전 : 2021-01-09 19:41:03.644702
after_one_millisecond = now + timedelta(milliseconds=1)
print("1밀리초 후 :", after_one_millisecond)	# 1밀리초 후 : 2021-01-09 19:41:03.646702

before_one_second = now - timedelta(seconds=1)
print("1초 전 :", before_one_second)	# 1초 전 : 2021-01-09 19:41:02.645702
after_one_second = now + timedelta(seconds=1)
print("1초 후 :", after_one_second)	# 1초 후 : 2021-01-09 19:41:04.645702

before_one_minute = now - timedelta(minutes=1)
print("1분 전 :", before_one_minute)	# 1분 전 : 2021-01-09 19:40:03.645702
after_one_minute = now + timedelta(minutes=1)
print("1분 후 :", after_one_minute)	# 1분 후 : 2021-01-09 19:42:03.645702

before_one_hour = now - timedelta(hours=1)
print("1시간 전 :", before_one_hour)	# 1시간 전 : 2021-01-09 18:41:03.645702
after_one_hour = now + timedelta(hours=1)
print("1시간 후 :", after_one_hour)	# 1시간 후 : 2021-01-09 20:41:03.645702

before_one_day = now - timedelta(days=1)
print("1일 전 :", before_one_day)	# 1일 전 : 2021-01-08 19:41:03.645702
after_one_day = now + timedelta(days=1)
print("1일 후 :", after_one_day)	# 1일 후 : 2021-01-10 19:41:03.645702

before_one_week = now - timedelta(weeks=1)
print("1주 후 :", before_one_week)	# 1주 후 : 2021-01-02 19:41:03.645702
after_one_week = now + timedelta(weeks=1)
print("1주 후 :", after_one_week)	# 1주 후 : 2021-01-16 19:41:03.645702

datetime에 timedelta 를 사용하여 계산하는 방법입니다.

timedelta에 microseconds, milliseconds, seconds, minutes, hours, days, weeks Parameter에 값을 원하는 수로 입력하고,

기준이 되는 날짜에 더하거나 빼주면 계산된 날짜와 시간을 아주 쉽게 구할 수 있습니다.

마이크로초, 밀리초, 초, 분, 시간, 일, 주 를 더하고 빼고싶을 때는 위와 같이 datetime에 timedelta를 사용하시면 됩니다.

 

from datetime import datetime, timedelta

now = datetime.now()
print("현재 :" , now)
after_1_week_3_days_2_hours = now + timedelta(weeks=1, days=3, hours=2)
print("1주 하고 3일하고 2시간 후 :", after_1_week_3_days_2_hours)

# 출력
# 현재 : 2021-01-09 19:52:20.922781
# 1주 하고 3일하고 2시간 후 : 2021-01-19 21:52:20.922781

물론 위와같이 하나뿐만이 아니라 주, 일, 시간 등 여러개를 넣어서 계산하는 것도 가능합니다.

 

dateutil.relativedelta.relativedelta 를 사용하는 방법.

마이크로초, 초, 분, 시간, 일, 주, 월, 년을 원하는 만큼 더하고 빼는 방법입니다.

from datetime import datetime
from dateutil.relativedelta import relativedelta

now = datetime.now()
print("현재 :" , now)	# 현재 : 2021-01-09 20:07:09.682594

before_one_microsecond = now - relativedelta(microseconds=1)
print("1마이크로초 전 :", before_one_microsecond)	# 1마이크로초 전 : 2021-01-09 20:07:09.682593
after_one_microsecond = now + relativedelta(microseconds=1)
print("1마이크로초 후 :", after_one_microsecond)	# 1마이크로초 후 : 2021-01-09 20:07:09.682595

before_one_second = now - relativedelta(seconds=1)
print("1초 전 :", before_one_second)	# 1초 전 : 2021-01-09 20:07:08.682594
after_one_second = now + relativedelta(seconds=1)
print("1초 후 :", after_one_second)	# 1초 후 : 2021-01-09 20:07:10.682594

before_one_minute = now - relativedelta(minutes=1)
print("1분 전 :", before_one_minute)	# 1분 전 : 2021-01-09 20:06:09.682594
after_one_minute = now + relativedelta(minutes=1)
print("1분 후 :", after_one_minute)	# 1분 후 : 2021-01-09 20:08:09.682594

before_one_hour = now - relativedelta(hours=1)
print("1시간 전 :", before_one_hour)	# 1시간 전 : 2021-01-09 19:07:09.682594
after_one_hour = now + relativedelta(hours=1)
print("1시간 후 :", after_one_hour)	# 1시간 후 : 2021-01-09 21:07:09.682594

before_one_day = now - relativedelta(days=1)
print("1일 전 :", before_one_day)	# 1일 전 : 2021-01-08 20:07:09.682594
after_one_day = now + relativedelta(days=1)
print("1일 후 :", after_one_day)	# 1일 후 : 2021-01-10 20:07:09.682594

before_one_week = now - relativedelta(weeks=1)
print("1주 전 :", before_one_week)	# 1주 후 : 2021-01-02 20:07:09.682594
after_one_week = now + relativedelta(weeks=1)
print("1주 후 :", after_one_week)	# 1주 후 : 2021-01-16 20:07:09.682594

before_one_month = now - relativedelta(months=1)
print("1달 전 :", before_one_month)	# 1달 전 : 2020-12-09 20:07:09.682594
after_one_month = now + relativedelta(months=1)
print("1달 후 :", after_one_month)	# 1달 후 : 2021-02-09 20:07:09.682594

before_one_year = now - relativedelta(years=1)
print("1년 전 :", before_one_year)	# 1년 전 : 2020-01-09 20:07:09.682594
after_one_year = now + relativedelta(years=1)
print("1년 후 :", after_one_year)	# 1년 후 : 2022-01-09 20:07:09.682594

dateutil.relativedelta.relativedelta 를 사용하여 계산하는 방법입니다.

보시면 아시겠지만 방식 자체만 보면 datetime.timedelta 를 사용한 것과 다를 것이 없어보이고, 구할 수 있는 것도 다르지 않아보이지만,

두 라이브러리는 아주 큰 차이가 있습니다.

 

timedelta 에는 Parameter에 months years가 존재하지 않습니다.

relativedelta 에는 milliseconds가 존재하지 않습니다.

즉, 마이크로초 전, 마이크로초 후 를 구하고 싶다면 timedelta를 사용하셔야 하고,

몇달 전, 몇달 후, 몇년 전, 몇년 후 를 구하고 싶다면 relativedelta를 사용하셔야 합니다.

 

from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta

now = datetime.now()
print("현재 :" , now)	# 현재 : 2021-01-09 20:27:32.759917
after_1_week_3_days_2_hours = now + timedelta(weeks=1, days=3, hours=2)
print("1주 하고 3일하고 2시간 후 :", after_1_week_3_days_2_hours)	# 1주 하고 3일하고 2시간 후 : 2021-01-19 22:27:32.759917
after_2_years_4_months_3_weeks = now + relativedelta(years=2, months=4, weeks=3)
print("2년 하고 4달하고 3주 후 :", after_2_years_4_months_3_weeks)	# 2년 하고 4달하고 3주 후 : 2023-05-30 20:27:32.759917

두 라이브러리 모두 위와같이 하나뿐만이 아니라 연, 월, 주, 일, 시간 등 여러개를 넣어서 계산하는 것도 가능합니다.

 

 


관련 정보

 

Python 날짜 차이 계산, 날짜 비교 방법

Python 날짜 차이 계산, 날짜 비교 방법 Python에서 두 날짜의 차이를 계산하는 방법을 알려드리도록 하겠습니다. from datetime import datetime now = datetime.now() print("현재 :", now) # 현재 : 2021..

jsikim1.tistory.com

 

Python 날짜, 시간을 문자열로 변환하는 방법 (date to string, time to string) - strftime

Python 날짜, 시간을 문자열로 변환하는 방법 (date  to string, time to string) - strftime Python 에서 날짜 형식과 시간 형식을 원하는 문자열 형식으로 변환하는 방법을 알려드리도록 하겠습니다. Python..

jsikim1.tistory.com

 

Python 문자열을 날짜, 시간으로 변환하는 방법 (string to date, string to time) - strptime

Python 문자열을 날짜, 시간으로 변환하는 방법 (string to date, string to time) - strptime Python 에서 문자열을 날짜, 시간으로 변환하는 방법을 알려드리도록 하겠습니다. Python 에서 strp..

jsikim1.tistory.com


 

 

도움이 되셨다면 공감, 댓글 부탁드립니다!

궁금하신 점이나 요청사항은 언제든지 말씀해주세요!

피드백도 언제나 환영입니다!

 

감사합니다.


댓글