it-swarm.com.de

Unterschied zwischen zwei Datumsangaben in Python

Ich habe zwei verschiedene Termine und ich möchte den Unterschied der Tage zwischen ihnen wissen. Das Format des Datums ist JJJJ-MM-TT.

Ich habe eine Funktion, die einem Datum eine bestimmte Nummer HINZUFÜGEN oder SUBTRACTIEREN kann:

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

dabei ist A das Datum und x die Anzahl der Tage, die ich hinzufügen möchte. Und das Ergebnis ist ein anderes Datum.

Ich brauche eine Funktion, bei der ich zwei Termine angeben kann und das Ergebnis wäre ein int mit Datumsunterschied in Tagen.

84
mauguerra

Verwenden Sie -, um die Differenz zwischen zwei datetime-Objekten abzurufen, und nehmen Sie das Member 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)
179
Fred Foo

Eine weitere kurze Lösung:

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()
18
0x8BADF00D

Ich habe den oben von larsmans veröffentlichten Code ausprobiert, aber es gibt ein paar Probleme:

1) Der Code wird, wie von mauguerra .__ angegeben, den Fehler auslösen. 2) Wenn Sie den Code wie folgt ändern:

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

Dadurch werden Ihre datetime-Objekte in zwei Zeichenfolgen konvertiert

1) Der Versuch, d2 - d1 auszuführen, schlägt fehl, da Sie den Minus-Operator nicht für Strings und .__ verwenden können. 2) Wenn Sie die erste Zeile der obigen Antwort lesen, möchten Sie den Operator - - aber für zwei Datetime-Objekte verwenden Sie haben sie gerade in Strings umgewandelt

Was ich gefunden habe ist, dass Sie buchstäblich nur Folgendes brauchen:

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
2
schalkneethling

Versuche dies:

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