Podsumowuję dyskusję na dwa etapy:
- Konwertuj surowy format na
datetimeobiekt.
- Użyj funkcji
datetimeobiektu lub dateobiektu, aby obliczyć numer tygodnia.
Rozgrzać się
`` python
from datetime import datetime, date, time
d = date(2005, 7, 14)
t = time(12, 30)
dt = datetime.combine(d, t)
print(dt)
``
1. krok
Aby ręcznie wygenerować datetimeobiekt, możemy użyć datetime.datetime(2017,5,3)lubdatetime.datetime.now() .
Ale w rzeczywistości zwykle musimy przeanalizować istniejący ciąg. możemy użyć strptimefunkcji, na przykład datetime.strptime('2017-5-3','%Y-%m-%d')w której musisz określić format. Szczegółowy kod innego formatu można znaleźć w oficjalnej dokumentacji .
Alternatywnie, wygodniejszym sposobem jest użycie modułu dateparse . Przykładami są dateparser.parse('16 Jun 2010'), dateparser.parse('12/2/12')lubdateparser.parse('2017-5-3')
Powyższe dwa podejścia zwrócą datetimeobiekt.
2. krok
Użyj uzyskanego datetimeobiektu do wywołania strptime(format). Na przykład,
`` 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.
``
Bardzo trudno jest zdecydować, którego formatu użyć. Lepszym sposobem jest datewywołanie obiektu isocalendar(). Na przykład,
`` 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
``
W rzeczywistości będziesz bardziej skłonny do date.isocalendar()przygotowania cotygodniowego raportu, zwłaszcza w sezonie zakupowym „Boże Narodzenie-Nowy Rok”.