파이썬 날짜코드 질문

파이썬 날짜코드 질문

QA

파이썬 날짜코드 질문

본문

 https://stackoverflow.com/questions/546321/how-do-i-calculate-the-date-six-months-from-the-current-date-using-the-datetime?page=2&tab=votes#tab-top

 

---------------------------------------------------

from datetime import date

 

def after_month(given_date, month):

    yyyy = int(((given_date.year * 12 + given_date.month) + month)/12)

    mm = int(((given_date.year * 12 + given_date.month) + month)%12)

 

    if mm == 0:

        yyyy -= 1

        mm = 12

    return given_date.replace(year=yyyy, month=mm)

 

 print(next_date, end = ' ')

-----------------------------------------------------

링크에서 처럼 현재날짜를 지정하여 입력하고 한달후를 출력하고 싶으면 위코드에 무엇을 추가하고 수정해줘야 할까요?

이 질문에 댓글 쓰기 :

답변 1

안녕하세요?

 

datetime.date로 해결하려면 2월 및 윤년과 관련하여 복잡할 것 같아요~

 

올려주신 방식과 유사하게 해결하면 다음과 같이 작성할 수 있겠네요!

 


from datetime import date
 
def addMonth(d):
    newmonth = (d.month % 12) + 1
    newyear  = int(d.year + (d.month / 12))
    return date(newyear, newmonth, d.day)
 
today = date.today()
print(addMonth(today))

 

그런데 위 스크립트에서 현재 날짜가 2019. 1. 31.라면 에러가 발생합니다 ㅠㅠ

 

따라서 별도의 모듈을 활용하시는게 수월하실거에요~!

 

 

우선 가장 간단하게 작성하려면 relativedelta 모듈을 사용하시면 되어요~

 

이 모듈은 어떠한 경우에도 잘 작동하도록 되어있어요 ^^

 


from datetime import date
from dateutil.relativedelta import relativedelta
 
add_1_month = date.today() + relativedelta(months = 1)
print(add_1_month)

 

 

한편 다음과 같이 calendar 모듈을 사용하는 방식도 생각해볼 수 있는데요~

 

그런데 오늘이 1월 31일인 경우에는 31일을 더하기 때문에 결과가 3월로 넘어갑니다 ㅎㄷㄷ

(1월이 31일까지 있으므로 31일을 더하는 그런 방식이에요)

 


from datetime import date, timedelta
import calendar
 
today = date.today()
addMonth = timedelta(days=calendar.monthrange(today.year, today.month)[1])
result = today + addMonth
print(result)

 

 

그럼 남은 주말 즐겁게 보내세요 ^-^

 

감사합니다!

 

답변을 작성하시기 전에 로그인 해주세요.
전체 138
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT