120 votes

Python: donner le début et la fin de la semaine des données à partir d'une date donnée

jour = "13/Oct/2013"
print("Parsing :",jour)
jour, mois, annee = jour.split("/")
sjour = annee+" "+jour+" "+mois
mon_jour = time.strptime(sjour, '%Y %d %b')
Sdebut = annee+" "+time.strftime("%U",mon_jour )+" 0"
Sfin = annee+" "+time.strftime("%U",mon_jour )+" 6"
debut_semaine = time.strptime(Sdebut, '%Y %U %w')
fin_semaine = time.strptime(Sfin, '%Y %U %w')
print("Début de la semaine:",time.strftime("%a, %d %b %Y",debut_semaine))
print("Fin de la semaine:",time.strftime("%a, %d %b %Y",fin_semaine))
print("Données saisies:",time.strftime("%a, %d %b %Y",mon_jour))

out:
Parsing : 13/Oct/2013
Début de la semaine: Sun, 13 Oct 2013
Fin de la semaine: Sat, 19 Oct 2013
Sun, 13 Oct 2013

J'ai appris le python au cours des 2 derniers jours et je me demandais s'il existe un moyen plus propre de le faire. Cette méthode fonctionne... elle semble juste moche et il semble ridicule de devoir créer une nouvelle variable temporelle pour chaque date, et qu'il devrait y avoir un moyen de décaler la date donnée au début et à la fin de la semaine à travers un simple appel mais je n'ai pas réussi à trouver quelque chose sur internet ou dans la documentation qui semble fonctionner.

250voto

Hyperboreus Points 15985

Utilisez le module datetime.

Cela donnera le début et la fin de la semaine (du lundi au dimanche) :

from datetime import datetime, timedelta

jour = '12/Oct/2013'
dt = datetime.strptime(jour, '%d/%b/%Y')
debut = dt - timedelta(days=dt.weekday())
fin = debut + timedelta(days=6)
print(debut)
print(fin)

MODIFIER :

print(debut.strftime('%d/%b/%Y'))
print(fin.strftime('%d/%b/%Y'))

51voto

palamunder Points 1071

Légère variation si vous souhaitez conserver le format d'heure standard et vous référer à la journée actuelle :

from datetime import date, timedelta

aujourd'hui = date.today()
début = aujourd'hui - timedelta(days=aujourd'hui.weekday())
fin = début + timedelta(days=6)
print("Aujourd'hui : " + str(aujourd'hui))
print("Début : " + str(début))
print("Fin : " + str(fin))

31voto

ogeretal Points 51

Utilisez le module pendulum :

aujourd'hui = pendulum.now()
début = aujourd'hui.start_of('week')
fin = aujourd'hui.end_of('week')

11voto

Alon Gouldman Points 363

Vous pouvez également utiliser Arrow :

import arrow
maintenant = arrow.now()
debut_de_semaine = maintenant.floor('week')
fin_de_semaine = maintenant.ceil('week')

1voto

Hinal Patel Points 43
pip install pendulum

import pendulum

today = pendulum.now()

start = today.start_of('week')
print(start.to_datetime_string())

end = today.end_of('week')
print(end.to_datetime_string())

trouvé ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X