Bài học theo mô-đun (2/4)
datetime: ngày và giờ
Mô-đun datetime cung cấp các lớp biểu thị ngày và giờ.
Ba lớp chính
date— chỉ ngày (năm, tháng, ngày)time— chỉ thời gian (giờ, phút, giây, micro giây)datetime— ngày + thời gian bên nhautimedelta— một thời lượng (sự khác biệt giữa hai thời điểm)
from datetime import date, time, datetime, timedelta
date(2025, 1, 1) # datetime.date(2025, 1, 1)
time(14, 30, 0) # datetime.time(14, 30)
datetime(2025, 1, 1, 14, 30, 0) # datetime.datetime(2025, 1, 1, 14, 30)"Bây giờ": now và today
datetime.now() # current date + time
date.today() # current date onlySố học với timedelta
from datetime import datetime, timedelta
ora = datetime(2025, 1, 1, 12, 0)
domani = ora + timedelta(days=1)
una_ora_fa = ora - timedelta(hours=1)
# difference between two datetimes -> timedelta
delta = domani - ora
delta.days # 1
delta.total_seconds() # 86400.0timedelta chấp nhận days, seconds, microseconds, milliseconds,
minutes, hours, weeks (KHÔNG phải months hoặc years, những điều này không rõ ràng).
Định dạng: strftime
Chuyển đổi ngày giờ → chuỗi theo mẫu.
ora = datetime(2025, 1, 1, 14, 30)
ora.strftime("%Y-%m-%d") # '2025-01-01'
ora.strftime("%d/%m/%Y %H:%M") # '01/01/2025 14:30'
ora.strftime("%A %d %B %Y") # 'Wednesday 01 January 2025' (locale-dependent)Lệnh được sử dụng nhiều nhất: %Y năm 4 chữ số, %m tháng 2 chữ số, %d ngày 2 chữ số,
%H 24 giờ, %M phút, %S giây.
Phân tích cú pháp: strptime
Ngược lại: chuỗi → ngày giờ, đưa ra mẫu dự kiến.
datetime.strptime("01/01/2025", "%d/%m/%Y")
# datetime.datetime(2025, 1, 1, 0, 0)ISO 8601
Để trao đổi dữ liệu, luôn ưu tiên định dạng ISO 8601 (YYYY-MM-DDTHH:MM:SS):
ora.isoformat() # '2025-01-01T14:30:00'
datetime.fromisoformat("2025-01-01T14:30:00")Múi giờ và thời gian nhận biết
Theo mặc định, các đối tượng datetime trong Python là ngây thơ (có nghĩa là chúng không chứa thông tin múi giờ). Đối với các ứng dụng trong thế giới thực, cách tốt nhất là làm cho chúng nhận biết bằng cách đặt thông tin múi giờ qua datetime.timezone.utc hoặc sử dụng mô-đun zoneinfo.
Hãy thử nó
Tính ngày 30 ngày sau ngày 1 tháng 1 năm 2025 và định dạng ngày đó là 'YYYY-MM-DD' trong biến `date_str`. Đánh giá `date_str`.
Hiển thị gợi ý
base + timedelta(ngày=30), sau đó .strftime
Giải pháp khả dụng sau 3 lần thử
Xem lại bài tập
Cho chuỗi `s = '15/03/2025'`, phân tích chuỗi đó bằng strptime thành biến `d` (đối tượng datetime). Đánh giá ngày nguyên trong tuần `d.weekday()` (0=Mon, 6=Sun).
Hiển thị gợi ý
strptime bằng mẫu định dạng tiếng Ý.
Giải pháp khả dụng sau 3 lần thử
Thử thách bổ sung
Import `date` from the `datetime` module. Calculate the difference in days between December 25, 2026 (`date(2026, 12, 25)`) and December 20, 2026 (`date(2026, 12, 20)`). Store the integer number of days (using the `.days` attribute of the delta) in `days_diff`. Finally, evaluate the variable.
Hiển thị gợi ý
The difference between two dates returns a timedelta. Access the integer days with delta.days.
Giải pháp khả dụng sau 3 lần thử