web-dev-qa-db-fra.com

Python: donne les données de début et de fin de semaine à partir d'une date donnée

day = "13/Oct/2013"
print("Parsing :",day)
day, mon, yr= day.split("/")
sday = yr+" "+day+" "+mon
myday = time.strptime(sday, '%Y %d %b')
Sstart = yr+" "+time.strftime("%U",myday )+" 0"
Send = yr+" "+time.strftime("%U",myday )+" 6"
startweek = time.strptime(Sstart, '%Y %U %w')
endweek = time.strptime(Send, '%Y %U %w')
print("Start of week:",time.strftime("%a, %d %b %Y",startweek))
print("End of week:",time.strftime("%a, %d %b %Y",endweek))
print("Data entered:",time.strftime("%a, %d %b %Y",myday))

out:
Parsing : 13/Oct/2013
Start of week: Sun, 13 Oct 2013
End of week: Sat, 19 Oct 2013
Sun, 13 Oct 2013

Appris python au cours des 2 derniers jours et je me demandais s’il existait une méthode plus propre pour le faire. Cette méthode fonctionne ... elle a tout simplement l'air moche et il semble ridicule de devoir créer un nouveau moment variable pour chaque date, et qu’il devrait exister un moyen de décaler la date donnée au début et à la fin de la semaine par un simple appel, mais j’ai été incapable de trouver quoi que ce soit sur Internet ou une documentation qui semble pouvoir fonctionner.

52
shadowtdt09

Utilisez le module datetime.

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

from datetime import datetime, timedelta

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

MODIFIER:

print(start.strftime('%d/%b/%Y'))
print(end.strftime('%d/%b/%Y'))
124
Hyperboreus

Légère variation si vous souhaitez conserver la mise en forme de l'heure standard et vous reporter au jour actuel:

from datetime import datetime, timedelta

today = datetime.now().date()
start = today - timedelta(days=today.weekday())
end = start + timedelta(days=6)
print("Today: " + str(today))
print("Start: " + str(start))
print("End: " + str(end))
11
palamunder

Utilisez le module pendule

    today = pendulum.now()
    start = today.start_of('week')
    end = today.end_of('week')
3
ogeretal