Dùng phương thức isocalendar() của date hoặc datetime để lấy năm, số tuần, ngày trong tuần theo tiêu chuẩn ISO 8601 (tuần bắt đầu thứ 2).
Ví dụ cơ bản
import datetime
today = datetime.date.today()
year, week_num, day_of_week = today.isocalendar()
print(f"Tuần #{week_num} của năm {year}")
print(f"Thứ trong tuần: {day_of_week} (1=Thứ 2, 7=Chủ Nhật)")
Kết quả
Tuần #1 của năm 2018
Thứ trong tuần: 1
Lấy tuần cho ngày cụ thể
dt = datetime.date(2024, 12, 31)
year, week, dow = dt.isocalendar()
print(f"{dt} -> Tuần {week}/{year}, Thứ {dow}")
# 2024-12-31 -> Tuần 1/2025, Thứ 2 (ISO week date)
Lưu ý quan trọng
- ISO week date: Tuần đầu tiên của năm là tuần chứa thứ 4 đầu tiên của năm. Do đó, 31/12 có thể thuộc tuần 1 của năm sau.
day_of_week: 1=Thứ 2, ..., 7=Chủ Nhật.- Python 3.9+:
isocalendar()trả vềnamedtuplecó attribute.year, .week, .weekday.
Cách cũ (strftime) - Không khuyến nghị
# %U: tuần bắt đầu CN, %W: tuần bắt đầu T2
print(today.strftime("%U")) # Số tuần (CN đầu)
print(today.strftime("%W")) # Số tuần (T2 đầu)
Cách này kém chuẩn ISO, dễ nhầm lẫn.