Ich fasse die Diskussion in zwei Schritten zusammen:
- Konvertieren Sie das Rohformat in ein
datetime
Objekt.
- Verwenden Sie die Funktion eines
datetime
Objekts oder eines date
Objekts, um die Wochennummer zu berechnen.
Sich warm laufen
`` `Python
from datetime import datetime, date, time
d = date(2005, 7, 14)
t = time(12, 30)
dt = datetime.combine(d, t)
print(dt)
`` `
1. Schritt
Um ein datetime
Objekt manuell zu generieren , können wir datetime.datetime(2017,5,3)
oder verwenden datetime.datetime.now()
.
In der Realität müssen wir jedoch normalerweise eine vorhandene Zeichenfolge analysieren. Wir können strptime
Funktionen verwenden, datetime.strptime('2017-5-3','%Y-%m-%d')
in denen Sie das Format angeben müssen. Einzelheiten zu verschiedenen Formatcodes finden Sie in der offiziellen Dokumentation .
Alternativ ist es bequemer, das Dateparse- Modul zu verwenden. Beispiele sind dateparser.parse('16 Jun 2010')
, dateparser.parse('12/2/12')
oderdateparser.parse('2017-5-3')
Die beiden oben genannten Ansätze geben ein datetime
Objekt zurück.
2. Schritt
Verwenden Sie das erhaltene datetime
Objekt zum Aufrufen strptime(format)
. Zum Beispiel,
`` `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.
`` `
Es ist sehr schwierig zu entscheiden, welches Format verwendet werden soll. Ein besserer Weg ist es, ein date
Objekt zum Aufrufen zu bringen isocalendar()
. Zum Beispiel,
`` `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
`` `
In der Realität werden Sie eher date.isocalendar()
einen wöchentlichen Bericht erstellen, insbesondere in der Einkaufssaison "Weihnachten-Neujahr".