파이썬 날짜값 질문

doping   
   조회 4281   추천 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   1677384   백메가
2014-05   5143193   정은준1
2014-04   3901   빠시온
2016-12   3901   여주농민76
2020-08   3901   2CPUI김세훈
2017-11   3901   단정
2017-07   3901   김현우1
2016-06   3901   새총
2016-07   3901   빠시온
2019-07   3901   사랑하라
2017-06   3901   PCPCMAN
2018-08   3901   김건우
2019-08   3901   몬스
2013-11   3901   김영기대전
2017-09   3901   가빠로구나
2019-08   3901   wjdqh6544
2019-04   3901   김건우
2017-04   3901   옹굴
2018-09   3901   Galvanizer
2017-06   3901   다봉이
2018-05   3901   그린
2020-08   3901   모자란트