오늘 또는 기준 일자의 이전, 이후 상대 날짜  함수 예제 

 

글. 수알치 오상문 

 

# 상대날짜 구하는 함수 예제

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

반응형

+ Recent posts