파이썬 날짜값 질문

doping   
   조회 4042   추천 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 1509/5707
2015-12   1670635   백메가
2014-05   5135735   정은준1
2016-04   3831   경박한시민
2015-06   3831   e5472
2018-04   3831   김건우
2014-07   3831   노휘래
2015-03   3831   이유종
2015-06   3831   Won낙연
2018-07   3831   Sikieiki
2017-03   3831   이니스ii
2018-02   3831   여주농민76
2018-04   3831   epowergate
2018-08   3831   kking
2017-10   3831   으라차차차
2020-12   3831   guest1
2017-10   3831   실망했니
2015-01   3831   씨형
2018-02   3831   일국
2018-08   3831   voworks
2018-01   3831   삐돌이슬픔이
2016-02   3832   그파
2015-03   3832   못생긴애