Resumo a discussão em duas etapas:
- Converta o formato bruto para um
datetime
objeto.
- Use a função de um
datetime
objeto ou um date
objeto para calcular o número da semana.
Aquecer
`` python
from datetime import datetime, date, time
d = date(2005, 7, 14)
t = time(12, 30)
dt = datetime.combine(d, t)
print(dt)
`` ``
1º passo
Para gerar um datetime
objeto manualmente , podemos usar datetime.datetime(2017,5,3)
ou datetime.datetime.now()
.
Mas, na realidade, geralmente precisamos analisar uma string existente. podemos usar a strptime
função, como datetime.strptime('2017-5-3','%Y-%m-%d')
na qual você precisa especificar o formato. Detalhes de diferentes códigos de formato podem ser encontrados na documentação oficial .
Como alternativa, uma maneira mais conveniente é usar o módulo dateparse . Exemplos são dateparser.parse('16 Jun 2010')
, dateparser.parse('12/2/12')
oudateparser.parse('2017-5-3')
As duas abordagens acima retornarão um datetime
objeto.
2º passo
Use o datetime
objeto obtido para chamar strptime(format)
. Por exemplo,
`` 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.
`` ``
É muito complicado decidir qual formato usar. Uma maneira melhor é obter um date
objeto para chamar isocalendar()
. Por exemplo,
`` 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
`` ``
Na realidade, você provavelmente usará date.isocalendar()
para preparar um relatório semanal, especialmente na temporada de compras "Natal e Ano Novo".