Tôi tóm tắt các cuộc thảo luận thành hai bước:
- Chuyển đổi định dạng thô thành một
datetime
đối tượng.
- Sử dụng chức năng của một
datetime
đối tượng hoặc một date
đối tượng để tính số tuần.
Ấm lên
`` `trăn
from datetime import datetime, date, time
d = date(2005, 7, 14)
t = time(12, 30)
dt = datetime.combine(d, t)
print(dt)
`` `
Bước 1
Để tự tạo một datetime
đối tượng, chúng ta có thể sử dụng datetime.datetime(2017,5,3)
hoặcdatetime.datetime.now()
.
Nhưng trong thực tế, chúng ta thường cần phân tích một chuỗi hiện có. chúng ta có thể sử dụng strptime
chức năng, chẳng hạn như datetime.strptime('2017-5-3','%Y-%m-%d')
trong đó bạn phải xác định định dạng cụ thể. Chi tiết về mã định dạng khác nhau có thể được tìm thấy trong tài liệu chính thức .
Ngoài ra, một cách thuận tiện hơn là sử dụng mô-đun dateparse . Ví dụ là dateparser.parse('16 Jun 2010')
, dateparser.parse('12/2/12')
hoặcdateparser.parse('2017-5-3')
Hai cách tiếp cận trên sẽ trả về một datetime
đối tượng.
Bước 2
Sử dụng datetime
đối tượng thu được để gọi strptime(format)
. Ví dụ,
`` `trăn
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.
`` `
Thật khó để quyết định sử dụng định dạng nào. Một cách tốt hơn là để có được một date
đối tượng để gọi isocalendar()
. Ví dụ,
`` `trăn
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
`` `
Trong thực tế, bạn sẽ có nhiều khả năng sử dụng date.isocalendar()
để chuẩn bị báo cáo hàng tuần, đặc biệt là trong mùa mua sắm "Giáng sinh-Năm mới".