web-dev-qa-db-fra.com

Différence entre deux dates en Python

J'ai deux dates différentes et je veux connaître la différence de jours entre elles. Le format de la date est AAAA-MM-JJ.

J'ai une fonction qui peut ajouter ou soustraire un nombre donné à une date:

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

où A est la date et x le nombre de jours que je veux ajouter. Et le résultat est une autre date.

J'ai besoin d'une fonction où je peux donner deux dates et le résultat serait une différence de date en jours.

84
mauguerra

Utilisez - pour obtenir la différence entre deux objets datetime et prenez le membre 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

Une autre solution courte:

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

J'ai essayé le code posté par larsmans ci-dessus, mais il y a quelques problèmes:

1) Le code tel quel jettera l’erreur mentionnée par mauguerra 2) Si vous modifiez le code comme suit:

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

Cela convertira vos objets datetime en chaînes, mais deux choses

1) Essayer de faire d2 - d1 échouera car vous ne pouvez pas utiliser l’opérateur moins sur les chaînes et 2) Si vous lisez la première ligne de la réponse ci-dessus indiquée, vous voulez utiliser l’opérateur - sur deux objets datetime , vous venez de les convertir en chaînes

Ce que j’ai trouvé, c’est que vous n’avez littéralement besoin que de ce qui suit:

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

Essaye ça:

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