파이썬 날짜값 질문

doping   
   조회 4280   추천 0    

 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 = ' ')

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

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

짧은글 일수록 신중하게.
Krepe 2021-04
본문에 쓰신 url 들어가서 보니 dateutil.relativedelta 를 임포트해서 date 객체에 relativedelta(months=1) 를 더하는 방법이 직접 계산할 필요 없이 깔끔하게 구현이 될거같은데 별도의 모듈 사용 없이 계산을 해야하는건가요?
     
doping 2021-04
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 = ' ')

위 코드를 수정해서 값을 나타내려고 하는데, 좋은 방법이 있으신가요?
무아 2021-04
어제도 물어보고 답변하면 글지우고... 글 지울거 왜 묻나요?

여기서 두뇌 기름칠 퀴즈.

1월 31일의 한 달 후는 몇 일 일까요?
     
doping 2021-04
답해주신 무아님께는 감사드리지만 어제는 질문방향도 잘못정하고 비아냥댓글이 있어 지웠네요 ㅜㅜ 3월2일인가요??
          
무아 2021-04
위에 코드로는 2월 31일로 될 것이고 2월 31일은 존재하지 않아서 어제의 그 에러가 뜬 겁니다.

한 달의 개념을 30일 과 같이 날짜 개념으로 잡는다면 달 단위가 아닌 날짜 단위의 연산을 하는게 맞고
달의 명칭을 가지고 계산한다면 해당 달에 표현될 수 없는 날짜에 대한 예외 처리를 두는 것이 맞죠.
그냥 이대로도 잘 계산하는 것처럼 보이네요.

import datetime
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)

today = datetime.datetime.today()
print("today:", today)
print("after 1 month:", after_month(today, 1))

===

결과는 아래와 같네요.

today: 2021-04-21 22:23:12.109035
after 1 month: 2021-05-21 22:23:12.109035
     
doping 2021-04
그럼 혹시 현재 날짜를 지정해서 코드를 만드려고한다면 어떻게 수정하면 좋을까요?
          
datetime의 constructor가 아래와 같으니...
class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)

datetime.datetime(2021, 04, 27) 같은 식으로 만들면 되겠군요.

위의 코드에
another_day = datetime.datetime(1999, 8, 18)
print("another_day:", another_day)
print("after 3 months:", after_month(another_day, 3))

이렇게 추가하면, 결과가 아래처럼 나오네요.

~/workspace$ python3 next_month.py
today: 2021-04-27 01:48:29.779192
after 1 month: 2021-05-27 01:48:29.779192
another_day: 1999-08-18 00:00:00
after 3 months: 1999-11-18 00:00:00
트니아빠 2021-04
한 달 후의 정의를 하는게 우선이지 않을까요?
28일인지, 30일인지, 달력상 1달만 이동할 것인지 등에 대해서요.
아싸조쿠나 2021-04
현재값을 epoch로 변환해서 계산하는 방식이 편할거 같네요.


QnA
제목Page 1529/5708
2015-12   1677316   백메가
2014-05   5143133   정은준1
2016-02   3899   한효석
2017-05   3899   임두환
2021-01   3899   VSPress
2018-10   3899   이훝
2018-10   3899   행복하세
2019-10   3899   정상백
2019-08   3900   윤치열
2015-07   3900   DaVinci
2020-10   3900   막울었어요
2017-02   3900   NGC
2015-11   3900   Noadd
2014-10   3900   과메기
2014-08   3900   Larry
2014-07   3900   오모이데
2015-03   3900   PE81미정환
2023-04   3900   민경열
2015-03   3900   불로소득
2021-01   3900   회상2
2017-05   3900   만곰이
2017-10   3900   삐돌이슬픔이