Je résume la discussion en deux étapes:
- Convertissez le format brut en
datetime
objet.
- Utilisez la fonction d'un
datetime
objet ou d'un date
objet pour calculer le numéro de semaine.
Réchauffer
`` `python
from datetime import datetime, date, time
d = date(2005, 7, 14)
t = time(12, 30)
dt = datetime.combine(d, t)
print(dt)
`` ''
1ère étape
Pour générer manuellement un datetime
objet, nous pouvons utiliser datetime.datetime(2017,5,3)
oudatetime.datetime.now()
.
Mais en réalité, nous devons généralement analyser une chaîne existante. nous pouvons utiliser une strptime
fonction, telle que celle datetime.strptime('2017-5-3','%Y-%m-%d')
dans laquelle vous devez spécifier le format. Le détail du code de format différent peut être trouvé dans la documentation officielle .
Alternativement, un moyen plus pratique consiste à utiliser le module dateparse . Des exemples sont dateparser.parse('16 Jun 2010')
, dateparser.parse('12/2/12')
oudateparser.parse('2017-5-3')
Les deux approches ci-dessus renverront un datetime
objet.
2ème étape
Utilisez l' datetime
objet obtenu pour appeler strptime(format)
. Par exemple,
`` `python
dt = datetime.strptime('2017-01-1','%Y-%m-%d') # return a datetime object. This day is Sunday
print(dt.strftime("%W")) # '00' Monday as the 1st day of the week. All days in a new year preceding the 1st Monday are considered to be in week 0.
print(dt.strftime("%U")) # '01' Sunday as the 1st day of the week. All days in a new year preceding the 1st Sunday are considered to be in week 0.
print(dt.strftime("%V")) # '52' Monday as the 1st day of the week. Week 01 is the week containing Jan 4.
`` ''
Il est très difficile de décider du format à utiliser. Une meilleure façon est d'obtenir un date
objet à appeler isocalendar()
. Par exemple,
`` `python
dt = datetime.strptime('2017-01-1','%Y-%m-%d') # return a datetime object
d = dt.date() # convert to a date object. equivalent to d = date(2017,1,1), but date.strptime() don't have the parse function
year, week, weekday = d.isocalendar()
print(year, week, weekday) # (2016,52,7) in the ISO standard
`` ''
En réalité, vous serez plus susceptible de l'utiliser date.isocalendar()
pour préparer un rapport hebdomadaire, en particulier pendant la saison de magasinage "Noël-Nouvel An".