Я підсумовую дискусію за два етапи:
- Перетворити необроблений формат у
datetime
об'єкт.
- Використовуйте функцію
datetime
об'єкта або date
об’єкта для обчислення числа тижня.
Розминка
`` пітон
from datetime import datetime, date, time
d = date(2005, 7, 14)
t = time(12, 30)
dt = datetime.combine(d, t)
print(dt)
`` `
1-й крок
Щоб вручну генерувати datetime
об’єкт, ми можемо використовувати datetime.datetime(2017,5,3)
абоdatetime.datetime.now()
.
Але насправді нам зазвичай потрібно проаналізувати існуючий рядок. ми можемо використовувати strptime
функцію, таку, datetime.strptime('2017-5-3','%Y-%m-%d')
у якій вам потрібно вказати формат. Деталі коду іншого формату можна знайти в офіційній документації .
Крім того, більш зручним способом є використання модуля розбору дат . Прикладами є dateparser.parse('16 Jun 2010')
, dateparser.parse('12/2/12')
абоdateparser.parse('2017-5-3')
Зазначені вище підходи повернуть datetime
об'єкт.
2-й крок
Використовуйте отриманий datetime
об’єкт для дзвінка strptime(format)
. Наприклад,
`` пітон
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.
`` `
Дуже складно визначити, який формат використовувати. Кращий спосіб - отримати date
об’єкт для дзвінка isocalendar()
. Наприклад,
`` пітон
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
`` `
Насправді ви скоріше будете використовувати date.isocalendar()
для підготовки тижневого звіту, особливо в торговий сезон «Різдво-Новий рік».