# -*- coding: utf-8 -*-
from datetime import datetime
def dateDiffJour(dateeffet,dateecheance):
if dateeffet =3D=3D dateecheance:
jour =3D (dateecheance) - (dateeffet)
if dateeffet < dateecheance:
jour =3D (dateecheance) - (dateeffet)
else:
print " les dates entr=E9es ne sont pas valides "
return jour
if __name__=3D=3D'__main__':
j1 =3D jour (2007-11-01,2007-12-01)
j1.dateDiffJour()
Mais il me donne cette error
Traceback (most recent call last):
File "/home/sboa/date.py", line 13, in <module>
j1 =3D jour (2007-11-01,2007-12-01)
NameError: name 'jour' is not defined
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Cémoi
Bonsoir,
je te propose un code fonctionnel, mais testé que très brièvement:
import time, datetime
def diffDate(beginDate, endDate):
# convertit en struct_time begin = time.strptime(beginDate, '%Y-%m-%d') end = time.strptime(endDate, '%Y-%m-%d')
# convertit en secondes depuis epoch begin_sec = time.mktime(begin) end_sec = time.mktime(end)
# calcule la différence d = end_sec - begin_sec
# résultat au format timedelta return datetime.timedelta(seconds = d)
if __name__=='__main__': print diffDate('2006-09-21', '2007-12-01')
Pour ce que tu avais codé, notes que 2007-11-01 est évalué comme 3 entiers et 2 soustractions, alors que '2007-11-01' serait évalué comme une chaine de caractère. Dans mon exemple, le résultat est de 436 jours et tu gagnes même une heure au passage ;o) La valeur retournée par diffDate est un objet timedelta, tu peux utiliser les éléments du tuple comme bon te semble. La première partie du code te permet de modifier aisément la façon dont tu souhaites supporter les formats de dates. Pour rendre ton code robuste et un peu plus complet que ce que j'ai fait, il serait bon d'encadrer les conversions dans des try/except.
N'hésites pas à tirer profit de l'interactivité de l'interpréteur Python, via IPython par exemple, ou via un outil de développement léger (Pyscripter, au hasard) si tu veux avoir une vision plus clair de comment s'exécute ton code.
HTH,
Laurent
voici mon code de date
# -*- coding: utf-8 -*- from datetime import datetime
def dateDiffJour(dateeffet,dateecheance): if dateeffet == dateecheance: jour = (dateecheance) - (dateeffet) if dateeffet < dateecheance: jour = (dateecheance) - (dateeffet) else: print " les dates entrées ne sont pas valides " return jour if __name__=='__main__': j1 = jour (2007-11-01,2007-12-01) j1.dateDiffJour()
Mais il me donne cette error
Traceback (most recent call last): File "/home/sboa/date.py", line 13, in <module> j1 = jour (2007-11-01,2007-12-01) NameError: name 'jour' is not defined
Bonsoir,
je te propose un code fonctionnel, mais testé que très brièvement:
import time, datetime
def diffDate(beginDate, endDate):
# convertit en struct_time
begin = time.strptime(beginDate, '%Y-%m-%d')
end = time.strptime(endDate, '%Y-%m-%d')
# convertit en secondes depuis epoch
begin_sec = time.mktime(begin)
end_sec = time.mktime(end)
# calcule la différence
d = end_sec - begin_sec
# résultat au format timedelta
return datetime.timedelta(seconds = d)
if __name__=='__main__':
print diffDate('2006-09-21', '2007-12-01')
Pour ce que tu avais codé, notes que 2007-11-01 est évalué comme 3
entiers et 2 soustractions, alors que '2007-11-01' serait évalué comme
une chaine de caractère.
Dans mon exemple, le résultat est de 436 jours et tu gagnes même une
heure au passage ;o)
La valeur retournée par diffDate est un objet timedelta, tu peux
utiliser les éléments du tuple comme bon te semble.
La première partie du code te permet de modifier aisément la façon dont
tu souhaites supporter les formats de dates.
Pour rendre ton code robuste et un peu plus complet que ce que j'ai
fait, il serait bon d'encadrer les conversions dans des try/except.
N'hésites pas à tirer profit de l'interactivité de l'interpréteur
Python, via IPython par exemple, ou via un outil de développement léger
(Pyscripter, au hasard) si tu veux avoir une vision plus clair de
comment s'exécute ton code.
HTH,
Laurent
voici mon code de date
# -*- coding: utf-8 -*-
from datetime import datetime
def dateDiffJour(dateeffet,dateecheance):
if dateeffet == dateecheance:
jour = (dateecheance) - (dateeffet)
if dateeffet < dateecheance:
jour = (dateecheance) - (dateeffet)
else:
print " les dates entrées ne sont pas valides "
return jour
if __name__=='__main__':
j1 = jour (2007-11-01,2007-12-01)
j1.dateDiffJour()
Mais il me donne cette error
Traceback (most recent call last):
File "/home/sboa/date.py", line 13, in <module>
j1 = jour (2007-11-01,2007-12-01)
NameError: name 'jour' is not defined
je te propose un code fonctionnel, mais testé que très brièvement:
import time, datetime
def diffDate(beginDate, endDate):
# convertit en struct_time begin = time.strptime(beginDate, '%Y-%m-%d') end = time.strptime(endDate, '%Y-%m-%d')
# convertit en secondes depuis epoch begin_sec = time.mktime(begin) end_sec = time.mktime(end)
# calcule la différence d = end_sec - begin_sec
# résultat au format timedelta return datetime.timedelta(seconds = d)
if __name__=='__main__': print diffDate('2006-09-21', '2007-12-01')
Pour ce que tu avais codé, notes que 2007-11-01 est évalué comme 3 entiers et 2 soustractions, alors que '2007-11-01' serait évalué comme une chaine de caractère. Dans mon exemple, le résultat est de 436 jours et tu gagnes même une heure au passage ;o) La valeur retournée par diffDate est un objet timedelta, tu peux utiliser les éléments du tuple comme bon te semble. La première partie du code te permet de modifier aisément la façon dont tu souhaites supporter les formats de dates. Pour rendre ton code robuste et un peu plus complet que ce que j'ai fait, il serait bon d'encadrer les conversions dans des try/except.
N'hésites pas à tirer profit de l'interactivité de l'interpréteur Python, via IPython par exemple, ou via un outil de développement léger (Pyscripter, au hasard) si tu veux avoir une vision plus clair de comment s'exécute ton code.
HTH,
Laurent
voici mon code de date
# -*- coding: utf-8 -*- from datetime import datetime
def dateDiffJour(dateeffet,dateecheance): if dateeffet == dateecheance: jour = (dateecheance) - (dateeffet) if dateeffet < dateecheance: jour = (dateecheance) - (dateeffet) else: print " les dates entrées ne sont pas valides " return jour if __name__=='__main__': j1 = jour (2007-11-01,2007-12-01) j1.dateDiffJour()
Mais il me donne cette error
Traceback (most recent call last): File "/home/sboa/date.py", line 13, in <module> j1 = jour (2007-11-01,2007-12-01) NameError: name 'jour' is not defined
Alain
Une autre solution possible:
import datetime
def str_to_date (str):
try: a,m,j = [int (x) for x in str.split ("-")] return datetime.date (a,m,j) except: print "Date incorrecte", str raise
def diff_date (date1, date2):
return (date1 - date2).days
if __name__ == "__main__":
origine = str_to_date ("2007-12-01") aujourdhui = datetime.date.today ()