오늘 또는 기준 일자의 이전, 이후 상대 날짜 함수 예제
글. 수알치 오상문
# 상대날짜 구하는 함수 예제
from datetime import datetime, timedelta, date
from dateutil.relativedelta import relativedelta # pip install python-dateutil
import time
# 주어진 날짜를 기준으로 날짜를 돌려준다.
# 인수:
# base_date: 기준 날짜, 예; datetime(2000,5,9)
# 지정 안하면 오늘 기준으로 처리
# year: 더하거나 뺄 연도 (양수는 이후, 음수는 이전)
# month: 더하기는 뺄 월 (양수는 이후, 음수는 이전)
# day: 더하거나 뺄 일 (양수는 이후, 음수는 이전)
# 반환:
# ret_format이 지정된 경우 해당 포맷 이용, 파이썬 strftime 형식: (예) "%Y-%m-%d"
# ret_format 없는 경우: "YYYY-MM-DD" 형식 반환, (예) "2022-07-15"
# 에러 발생한 경우: False 반환
def relative_date(base_date=None, year=0, month=0, day=0, ret_format="%Y-%m-%d"):
try:
if base_date is None: # 기준 날짜 없으면 오늘 기준으로 처리
base_date = datetime.now()
elif type(base_date) != type(datetime(2000,1,1)): # datetime 형식 아니면 False 반환
return False
base_date = base_date + relativedelta(years=year, months=month, days=day)
date = base_date.strftime(ret_format)
return date
except:
return False
# 예제 -----------------------------------------------------------
print('오늘보다 1년 전:', relative_date(year=-1))
print('오늘보다 1년 후:', relative_date(year=1))
print('오늘보다 1달 전:', relative_date(month=-1))
print('오늘보다 1달 후:', relative_date(month=1))
print('오늘보다 1일 전:', relative_date(day=-1))
print('오늘보다 1일 후:', relative_date(day=1))
base_date = datetime(2000,5,9) # 기준 날짜는 datatime 타입으로 변경
print('2000년 5월 9일보다 1년 전:', relative_date(base_date=base_date, year=-1))
print('2000년 5월 9일보다 1년 후:', relative_date(base_date=base_date, year=1))
print('2000년 5월 9일보다 1달 전:', relative_date(base_date=base_date, month=-1))
print('2000년 5월 9일보다 1달 후:', relative_date(base_date=base_date, month=1))
print('2000년 5월 9일보다 1일 전:', relative_date(base_date=base_date, day=-1))
print('2000년 5월 9일보다 1일 전:', relative_date(base_date=base_date, day=1))
print('2000년 5월 9일보다 1년 전:', relative_date(base_date=base_date, year=-1, ret_format="%Y%m%d"))
print('2000년 5월 9일보다 1년 후:', relative_date(base_date=base_date, year=1, ret_format="%Y%m%d"))
print('2000년 5월 9일보다 1달 전:', relative_date(base_date=base_date, month=-1, ret_format="%Y%m%d"))
print('2000년 5월 9일보다 1달 후:', relative_date(base_date=base_date, month=1, ret_format="%Y%m%d"))
print('2000년 5월 9일보다 1일 전:', relative_date(base_date=base_date, day=-1, ret_format="%Y%m%d"))
print('2000년 5월 9일보다 1일 전:', relative_date(base_date=base_date, day=1, ret_format="%Y%m%d"))
print('잘못된 전달:', relative_date(base_date="??", day=1, ret_format="%Y%m%d"))
[실행 결과] 오늘이 2022년 7월 14일인 경우
오늘보다 1년 전: 2021-07-14
오늘보다 1년 후: 2023-07-14
오늘보다 1달 전: 2022-06-14
오늘보다 1달 후: 2022-08-14
오늘보다 1일 전: 2022-07-13
오늘보다 1일 후: 2022-07-15
2000년 5월 9일보다 1년 전: 1999-05-09
2000년 5월 9일보다 1년 후: 2001-05-09
2000년 5월 9일보다 1달 전: 2000-04-09
2000년 5월 9일보다 1달 후: 2000-06-09
2000년 5월 9일보다 1일 전: 2000-05-08
2000년 5월 9일보다 1일 전: 2000-05-10
2000년 5월 9일보다 1년 전: 19990509
2000년 5월 9일보다 1년 후: 20010509
2000년 5월 9일보다 1달 전: 20000409
2000년 5월 9일보다 1달 후: 20000609
2000년 5월 9일보다 1일 전: 20000508
2000년 5월 9일보다 1일 전: 20000510
잘못된 전달: False
'Python 기초' 카테고리의 다른 글
파이썬, 동기식, 비동기식(구형/신형) 함수 사용 비교 예제 (0) | 2022.07.29 |
---|---|
파이썬, 멀티 스레딩 (0) | 2022.07.28 |
파이썬, 회사명에서 주식회사 표현 및 공백 제거 (정규식 아님) (0) | 2022.07.08 |
파이썬, % 형식을 이용하여 한자리 월, 일은 앞에 0을 붙인 날짜 만들기 (0) | 2022.07.07 |
날짜 시간 포맷, strftime 함수 (0) | 2022.07.07 |