Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

correction de mon code

2 réponses
Avatar
sboamarie
voici mon code de date

# -*- 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

2 réponses

Avatar
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


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

print "Difference entre", origine, "et", aujourdhui, "=",
diff_date (origine, aujourdhui)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~

On peut changer l'ordre a,m,j en j,m,a pour des dates à la française,
et le "-" par "/"