पायथन में दो तिथियों के बीच अंतर


137

मेरे पास दो अलग-अलग तिथियां हैं और मैं उनके बीच के दिनों में अंतर जानना चाहता हूं। तारीख का प्रारूप YYYY-MM-DD है।

मेरे पास एक फ़ंक्शन है जो किसी तारीख को दिए गए नंबर को जोड़ या सबमिट कर सकता है:

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 है जिसे मैं जोड़ना चाहता हूं। और परिणाम एक और तारीख है।

मुझे एक फ़ंक्शन की आवश्यकता है जहां मैं दो तिथियां दे सकता हूं और परिणाम दिनों में अंतर के साथ एक इंट होगा।



ध्यान दें कि आपका addonDays फ़ंक्शन DST दिनों में विफल हो जाएगा।
मछुआरे

तुम सही हो। मैं पहले ही फ़ंक्शन को संशोधित करता हूं। यदि आप 3600 जोड़ते हैं (एक घंटा) काम करेगा।
मौगुएरा

जवाबों:


270

-दो 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वस्तु का परिणाम होगा ।
अगैंडर्स 3

कंसोल पर मेरी यह त्रुटि है: ऑब्जेक्ट 'datetime.datetime' में कोई विशेषता नहीं है 'स्ट्रैप्टम'
mauguerra

2
जब मैं एक टाइमडेल्टा ऑब्जेक्ट पर (।) करने का प्रयास करता हूं, तो मुझे टाइपError: 'int' ऑब्जेक्ट कॉल करने योग्य नहीं होता है और दस्तावेज़ इसका उल्लेख नहीं करता है ( docs.python.org/2/library/datetime.html )।
user1761806

4
क्या आप कृपया उल्लेख कर सकते total_secondsहैं? मुझे लगता है कि यह महत्वपूर्ण है क्योंकि जब मैंने secondsडॉक्स को पढ़े बिना कोशिश की तो मुझे यही उम्मीद थी ।
मार्टिन थोमा

1
@ ThejKiran डी 2 और डी 1 बिल्कुल एक दिन अलग हो जाएं और देखें कि क्या यह आपकी अपेक्षा है;;
मार्टिन थोमा

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
ना ifमें diff_datesपूरी तरह से अनावश्यक समारोह? निरपेक्ष मूल्य की परिभाषा से, abs(date1-date2)हमेशा के बराबर होगा abs(date2-date1)
ब्लैंकनथ

कम से कम Python3.5 के साथ प्रिंट स्टेटमेंट इस तरह दिखना चाहिए: प्रिंट ('{} दिनों के बीच {} और {}' '। Format (result1, d1, d2))
Ernestas Kardzys

2

मैंने उपरोक्त लार्समैन द्वारा पोस्ट किए गए कोड की कोशिश की लेकिन, कुछ समस्याएं हैं:

1) कोड के रूप में त्रुटि mauguerra 2 द्वारा वर्णित फेंक देंगे) यदि आप निम्नलिखित के लिए कोड को बदलते हैं:

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

यह आपके डेटाइम ऑब्जेक्ट्स को स्ट्रिंग्स में बदल देगा लेकिन, दो चीजें

1) d2 करने की कोशिश करना - d1 विफल हो जाएगा क्योंकि आप स्ट्रिंग्स पर माइनस ऑपरेटर का उपयोग नहीं कर सकते हैं और 2) यदि आप ऊपर दिए गए उत्तर की पहली पंक्ति पढ़ते हैं, तो आप - दो डेटाइम ऑब्जेक्ट पर ऑपरेटर का उपयोग करना चाहते हैं लेकिन, आप बस उन्हें स्ट्रिंग्स में बदल दिया

मैंने जो पाया वह यह है कि आपको केवल निम्नलिखित की आवश्यकता है:

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ऑब्जेक्ट में बदलने के लिए उपयोग करता है । चूंकि ओपी ने कहा कि "तारीख का प्रारूप YYYY-MM-DD है", मैंने माना कि तारीखों को तार के रूप में दर्शाया गया था। यदि वे नहीं हैं, तो स्पष्ट रूप से रूपांतरण की कोई आवश्यकता नहीं है।
फ्रेड फू

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()

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.