Ngày giờ trong Python: Làm việc với ngày và giờ

Tìm hiểu cách xử lý ngày, giờ, múi giờ và phép tính trong Python. Nắm vững định dạng, phân tích cú pháp và số học bằng cách sử dụng datetime và timedelta.

Thử trong Trình chỉnh sửa

Tổng quan

Xử lý ngày và giờ là một thách thức lớn trong phát triển phần mềm, do năm nhuận, điều chỉnh tiết kiệm ánh sáng ban ngày và các định dạng múi giờ khác nhau. Python giải quyết những thách thức này bằng mô-đun `datetime` tích hợp sẵn. Mô-đun này cung cấp một tập hợp mạnh mẽ các lớp đối tượng—chẳng hạn như `date`, `time`, `datetime` và `timezone`—thể hiện và thao tác dữ liệu thời gian một cách rõ ràng, giúp việc tính toán ngày trở nên đơn giản.

Một trong những tác vụ phổ biến nhất là chuyển đổi ngày thành chuỗi (định dạng) và chuỗi thành ngày (phân tích cú pháp). Python sử dụng hai phương thức chính cho việc này: `.strftime()` (thời gian định dạng chuỗi) chuyển đổi một đối tượng datetime thành một chuỗi có thể đọc được bằng cách sử dụng mã định dạng (như `%Y` cho năm, `%m` cho tháng và `%d` cho ngày). Ngược lại, `datetime.strptime()` (thời gian phân tích chuỗi) phân tích đầu vào chuỗi thô thành đối tượng datetime dựa trên mẫu định dạng phù hợp, điều này rất quan trọng khi đọc nhật ký hoặc đầu vào API.

Việc thực hiện phép toán ngày cũng được hỗ trợ đầy đủ bằng cách sử dụng đối tượng `timedelta`. `timedelta` biểu thị một khoảng thời gian (ví dụ: 7 ngày, 4 giờ). Bạn có thể cộng hoặc trừ `timedelta` khỏi `datetime` để tính ngày trong quá khứ hoặc tương lai (chẳng hạn như xác định ngày hết hạn). Khi làm việc với nhiều múi giờ, việc sử dụng các đối tượng nhận biết múi giờ (chẳng hạn như `zoneinfo` hoặc `timezone.utc`) là rất quan trọng để đảm bảo việc so sánh ngày vẫn chính xác trên các vị trí máy chủ khác nhau.

Đầu ra mã & thực thi

Phân tích chuỗi thành các đối tượng datetime và tính toán thời hạn trong tương lai bằng timedelta.

from datetime import datetime, timedelta

# Define a specific fixed base date and time (for deterministic runs)
base_date = datetime(2026, 5, 25, 23, 45, 50)
print(f"Base Date/Time: {base_date}")

# Format datetime as string
formatted = base_date.strftime("%Y-%m-%d %H:%M:%S")
print(f"Formatted String: {formatted}")

# Parse string to datetime
date_str = "2026-12-25"
parsed_date = datetime.strptime(date_str, "%Y-%m-%d")
print(f"Parsed Date: {parsed_date}")

# Date arithmetic with timedelta
ten_days_later = base_date + timedelta(days=10)
print(f"Date 10 days later: {ten_days_later.strftime('%Y-%m-%d')}")
Đầu ra thiết bị đầu cuối
Base Date/Time: 2026-05-25 23:45:50
Formatted String: 2026-05-25 23:45:50
Parsed Date: 2026-12-25 00:00:00
Date 10 days later: 2026-06-04

Triển khai từng bước

  • Tính ngày hết hạn dùng thử và ngày thanh toán
  • Phân tích chuỗi dấu thời gian bên trong nhật ký truy cập máy chủ
  • Lập kế hoạch công việc định kỳ tự động hoặc báo cáo định kỳ

Câu hỏi thường gặp

Đối tượng datetime ngây thơ và nhận thức là gì?

Một đối tượng datetime ngây thơ không chứa thông tin múi giờ, trong khi một đối tượng datetime nhận biết bao gồm các chênh lệch múi giờ, giúp an toàn cho việc tính toán thời gian quốc tế.

Làm cách nào để tính chênh lệch giữa hai ngày?

Việc trừ một đối tượng datetime khỏi một đối tượng khác sẽ trả về một đối tượng timedelta biểu thị khoảng thời gian chính xác giữa chúng.

Chủ đề liên quan

Tài nguyên Python được đề xuất

Mở rộng kiến thức của bạn với các hướng dẫn tương tác, bảng ghi chú và so sánh mã có liên quan.