[PYTHON] 파이썬 : 달의 차이 2 datetimes [duplicate]
PYTHON파이썬 : 달의 차이 2 datetimes [duplicate]
이 차이에 대해 정확한 개월 수를 알고 싶습니다.
date1 = datetime.strptime(str('2011-08-15 12:00:00'), '%Y-%m-%d %H:%M:%S')
date2 = datetime.strptime(str('2012-02-15'), '%Y-%m-%d')
date2-date1 결과 표시
datetime.timedelta(183, 43200)
정확한 개월 수를 알고 싶습니다.이 경우 5가 아니라 6을 반환해야합니다 (시간 때문에).
해결법
-
==============================
1.캘린더 모듈을 사용하여 매월 몇 일 동안 있는지 알아 내면 몇 달을 계산할 수 있습니다.
캘린더 모듈을 사용하여 매월 몇 일 동안 있는지 알아 내면 몇 달을 계산할 수 있습니다.
from calendar import monthrange from datetime import datetime, timedelta def monthdelta(d1, d2): delta = 0 while True: mdays = monthrange(d1.year, d1.month)[1] d1 += timedelta(days=mdays) if d1 <= d2: delta += 1 else: break return delta
-
==============================
2.python-dateutil을 사용할 수 있습니다.
python-dateutil을 사용할 수 있습니다.
In [4]: from datetime import datetime In [5]: date1 = datetime.strptime(str('2011-08-15 12:00:00'), '%Y-%m-%d %H:%M:%S') In [6]: date2 = datetime.strptime(str('2012-02-15'), '%Y-%m-%d') In [7]: from dateutil import relativedelta In [8]: r = relativedelta.relativedelta(date1, date2) In [9]: r Out[9]: relativedelta(months=-5, days=-30, hours=-12)
-
==============================
3.단지 당신이 만날해야하는 요구 사항을 알고 있지만이 두 날짜 사이에 183 일 및 43200 초가 있다는 사실은 "실제로"몇 달이 걸렸는지를 결정하는 고유 한 주관성을 강조합니다.
단지 당신이 만날해야하는 요구 사항을 알고 있지만이 두 날짜 사이에 183 일 및 43200 초가 있다는 사실은 "실제로"몇 달이 걸렸는지를 결정하는 고유 한 주관성을 강조합니다.
30 일 또는 (365 / 12) 일 또는 ((365 * 4 + 1) / 48) 일입니까, 아니면 ...입니까?
하루가 항상 86400 초입니까? 아니면 역사적인 도약 초를 계산합니까, 아니면 미래의 도약 시간을 예측합니까?
이러한 결정은 원하는 알고리즘이 이러한 경계에 가까운 특정 입력 날짜에 대한 대답을 줄 수 있습니다.
필자의 의견으로는이 목적을 위해 월을 원자 단위로 간주하고이 수식을 사용하는 것이 더 직관적입니다. (date2.year - date1.year) * 12 + (date2.month - date1.month)
-
==============================
4.이런 식으로하는 것의 장점은 모듈 의존성이 거의없고 루핑이 없다는 것입니다. 바로 계산을 통해 월을 찾을 수 있습니다.
이런 식으로하는 것의 장점은 모듈 의존성이 거의없고 루핑이 없다는 것입니다. 바로 계산을 통해 월을 찾을 수 있습니다.
import datetime as dt def months_between(date1,date2): if date1>date2: date1,date2=date2,date1 m1=date1.year*12+date1.month m2=date2.year*12+date2.month months=m2-m1 if date1.day>date2.day: months-=1 elif date1.day==date2.day: seconds1=date1.hour*3600+date1.minute+date1.second seconds2=date2.hour*3600+date2.minute+date2.second if seconds1>seconds2: months-=1 return months date1 = dt.datetime.strptime('2011-08-15 12:00:00', '%Y-%m-%d %H:%M:%S') date2 = dt.datetime.strptime('2012-02-15', '%Y-%m-%d') print(months_between(date1,date2)) # 5 date1 = dt.datetime.strptime('2011-08-15 12:00:00', '%Y-%m-%d %H:%M:%S') date2 = dt.datetime.strptime('2012-02-15 11:59:00', '%Y-%m-%d %X') print(months_between(date1,date2)) # 5 date2 = dt.datetime.strptime('2012-02-15 12:00:00', '%Y-%m-%d %X') print(months_between(date1,date2)) # 6 date2 = dt.datetime.strptime('2012-02-15 12:00:01', '%Y-%m-%d %X') print(months_between(date1,date2)) # 6
from https://stackoverflow.com/questions/7015587/python-difference-of-2-datetimes-in-months by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Python subprocess.check_output ()에서 예외 출력을 잡는 방법? (0) | 2018.10.30 |
---|---|
[PYTHON] 내 간단한 파이썬 프로그램이 오류가 계속 : "TypeError : 'float'개체를 정수로 해석 할 수 없습니다" (0) | 2018.10.30 |
[PYTHON] 파이썬 : 객체가 시퀀스인지 확인하십시오. (0) | 2018.10.30 |
[PYTHON] 파이썬 머리, 꼬리 및 텍스트 파일의 줄을 뒤로 읽어 (0) | 2018.10.30 |
[PYTHON] 자체 서명 된 SSL 인증서를 신뢰하도록 Python 요청을받는 방법? (0) | 2018.10.30 |