Chuyển đến nội dung chính
Mô-đun 8 · Bài học 2 trong tổng số 430/36 trong khóa học~12 min
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 nhau
  • timedelta — một thời lượng (sự khác biệt giữa hai thời điểm)
Python
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

Python
datetime.now()        # current date + time
date.today()          # current date only

Số học với timedelta

Python
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.0

timedelta 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.

Python
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.

Python
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):

Python
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ập thể dục#python.m8.l2.e1
Nỗ lực: 0Đang tải…

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`.

Đang tải trình chỉnh sửa…
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

tập thể dục#python.m8.l2.e2
Nỗ lực: 0Đang tải…

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).

Đang tải trình chỉnh sửa…
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

tập thể dục#python.m8.l2.e3
Nỗ lực: 0Đang tải…

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.

Đang tải trình chỉnh sửa…
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ử