파이썬에서 두 날짜의 차이점


137

나는 두 개의 다른 날짜를 가지고 있으며 그들 사이의 날짜 차이를 알고 싶습니다. 날짜 형식은 YYYY-MM-DD입니다.

주어진 숫자를 날짜에 추가하거나 SUBTRACT 할 수있는 기능이 있습니다.

def addonDays(a, x):
   ret = time.strftime("%Y-%m-%d",time.localtime(time.mktime(time.strptime(a,"%Y-%m-%d"))+x*3600*24+3600))      
   return ret

여기서 A는 날짜와 x 추가하려는 일 수입니다. 그리고 결과는 또 다른 날짜입니다.

두 날짜를 줄 수있는 함수가 필요하며 결과는 일의 날짜 차이가있는 int가됩니다.



addonDays 함수는 DST 일에 실패합니다.
fishinear

네 말이 맞아 이미 기능을 수정했습니다. 3600을 추가하면 (1 시간) 작동합니다.
mauguerra

답변:


272

사용 -둘 사이의 차이를받을 datetime객체를하고 받아 days회원.

from datetime import datetime

def days_between(d1, d2):
    d1 = datetime.strptime(d1, "%Y-%m-%d")
    d2 = datetime.strptime(d2, "%Y-%m-%d")
    return abs((d2 - d1).days)

37
좋은 대답입니다. 분명히 결과 (d2 - d1)timedelta객체 가 될 것 입니다.
aganders3

콘솔 에이 오류가 있습니다. type object 'datetime.datetime'에는 'strptime'속성이 없습니다.
mauguerra

2
Timedelta 객체에서 .days ()을 시도 할 때 TypeError : 'int'객체를 호출 할 수 없으며 설명서에서 언급하지 않습니다 ( docs.python.org/2/library/datetime.html ).
user1761806

4
당신도 언급 할 수 total_seconds있습니까? 나는 seconds문서를 읽지 않고 시도했을 때 얻을 것으로 예상되는 것이 중요하다고 생각합니다 .
Martin Thoma

1
@ThejKiran d2와 d1을 정확히 하루 간격으로 만들고 그것이 예상 한 것인지 확인하십시오. ;-)
Martin Thoma

27

또 다른 짧은 해결책 :

from datetime import date

def diff_dates(date1, date2):
    return abs(date2-date1).days

def main():
    d1 = date(2013,1,1)
    d2 = date(2013,9,13)
    result1 = diff_dates(d2, d1)
    print '{} days between {} and {}'.format(result1, d1, d2)
    print ("Happy programmer's day!")

main()

3
하지인가 ifdiff_dates완전히 불필요한 기능? 절대 값의 정의에 따라 abs(date1-date2)항상 같습니다 abs(date2-date1).
Blckknght

적어도 Python3.5의 경우 print 문은 다음과 같아야합니다. print ( '{} days {}와 {}'. format (result1, d1, d2))
Ernestas Kardzys

2

위의 larsmans가 게시 한 코드를 시도했지만 몇 가지 문제가 있습니다.

1) mauguerra에서 언급 한대로 코드에서 오류가 발생합니다 .2) 코드를 다음과 같이 변경하면 :

...
    d1 = d1.strftime("%Y-%m-%d")
    d2 = d2.strftime("%Y-%m-%d")
    return abs((d2 - d1).days)

이것은 datetime 객체를 문자열로 변환하지만 두 가지

1) d2-d1을 시도하면 문자열에서 빼기 연산자를 사용할 수 없으므로 실패하고 2) 위의 답변의 첫 번째 줄을 읽으면 두 개의 datetime 객체에-연산자를 사용하고 싶지만 그것들을 문자열로 변환

내가 찾은 것은 말 그대로 다음이 필요하다는 것입니다.

import datetime

end_date = datetime.datetime.utcnow()
start_date = end_date - datetime.timedelta(days=8)
difference_in_days = abs((end_date - start_date).days)

print difference_in_days

1
내 코드는 datetime.strptime문자열을 datetime객체 로 변환하는 데 사용 합니다. OP가 "날짜 형식은 YYYY-MM-DD"라고 명시 했으므로 날짜가 문자열로 표시되었다고 가정합니다. 그렇지 않다면 분명히 전환이 필요하지 않습니다.
Fred Foo

0

이 시도:

data=pd.read_csv('C:\Users\Desktop\Data Exploration.csv')
data.head(5)
first=data['1st Gift']
last=data['Last Gift']
maxi=data['Largest Gift']
l_1=np.mean(first)-3*np.std(first)
u_1=np.mean(first)+3*np.std(first)


m=np.abs(data['1st Gift']-np.mean(data['1st Gift']))>3*np.std(data['1st Gift'])
pd.value_counts(m)
l=first[m]
data.loc[:,'1st Gift'][m==True]=np.mean(data['1st Gift'])+3*np.std(data['1st Gift'])
data['1st Gift'].head()




m=np.abs(data['Last Gift']-np.mean(data['Last Gift']))>3*np.std(data['Last Gift'])
pd.value_counts(m)
l=last[m]
data.loc[:,'Last Gift'][m==True]=np.mean(data['Last Gift'])+3*np.std(data['Last Gift'])
data['Last Gift'].head()

-4

pd.date_range ( '2019-01-01', '2019-02-01'). shape [0]

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.