Xử Lý Ngày Tháng Và Thời Gian Với Module Datetime Trong Python

Trong quá trình phát triển ứng dụng, việc làm việc với dữ liệu thời gian là tác vụ diễn ra vô cùng thường xuyên: từ việc ghi log hệ thống, đặt lịch hẹn, tính khoảng thời gian hết hạn của tài khoản đến xử lý dữ liệu giao dịch. Python cung cấp sẵn module tích hợp datetime giúp bạn làm việc với ngày và giờ một cách chính xác và tối ưu.

Xử Lý Ngày Tháng Và Thời Gian Với Module Datetime Trong Python
Ảnh minh họa: Python datetime module - GeeksforGeeks

Bài viết này sẽ hướng dẫn bạn chi tiết các lớp dữ liệu cốt lõi trong module datetime, cách chuyển đổi dữ liệu thời gian thành chuỗi (và ngược lại), cũng như các phép toán cộng trừ thời gian thông qua timedelta.

1. Các Lớp Cốt Lõi Trong Module Datetime

Để bắt đầu sử dụng, bạn cần import module datetime. Module này cung cấp các lớp chính sau:

  • date: Đại diện cho ngày (năm, tháng, ngày).
  • time: Đại diện cho giờ (giờ, phút, giây, microsecond) độc lập với ngày.
  • datetime: Kết hợp cả ngày và giờ.
  • timedelta: Đại diện cho khoảng thời gian (khoảng lệch giữa hai thời điểm).
  • timezone: Hỗ trợ xử lý múi giờ.

Lấy thời gian hiện tại và khởi tạo đối tượng

Để lấy ngày hoặc thời gian hiện tại, bạn có thể sử dụng các phương thức như date.today() hoặc datetime.now():

from datetime import date, time, datetime

# Lấy ngày hiện tại
today = date.today()
print("Ngày hiện tại:", today)  # YYYY-MM-DD

# Lấy ngày và giờ hiện tại
now = datetime.now()
print("Thời gian hiện tại:", now)

# Truy cập các thuộc tính
print(f"Năm: {now.year}, Tháng: {now.month}, Ngày: {now.day}")
print(f"Giờ: {now.hour}, Phút: {now.minute}, Giây: {now.second}")

# Khởi tạo đối tượng thủ công
custom_date = date(2025, 12, 25)
custom_time = time(14, 30, 0)
custom_datetime = datetime(2025, 12, 25, 14, 30, 0)
print("Ngày lễ:", custom_datetime)

2. Định Dạng Và Parse Chuỗi Ngày Tháng (strftime & strptime)

Khi nhận dữ liệu đầu vào từ người dùng hoặc API, thời gian thường ở dạng chuỗi (string). Ngược lại, khi hiển thị ra giao diện, bạn cần chuyển đối tượng datetime thành chuỗi theo định dạng mong muốn.

Chuyển datetime thành chuỗi với strftime()

Phương thức strftime() (String Format Time) dùng để định dạng đối tượng datetime thành chuỗi văn bản:

from datetime import datetime

now = datetime.now()

# Định dạng ngày/tháng/năm giờ:phút:giây
formatted_1 = now.strftime("%d/%m/%Y %H:%M:%S")
print("Định dạng Việt Nam:", formatted_1)

# Định dạng dạng tên tháng
formatted_2 = now.strftime("%B %d, %Y")
print("Định dạng tiếng Anh:", formatted_2)

Một số mã định dạng phổ biến bao gồm:

  • %d: Ngày trong tháng (01 đến 31)
  • %m: Tháng trong năm (01 đến 12)
  • %Y: Năm 4 chữ số (ví dụ: 2025)
  • %H: Giờ theo định dạng 24h (00 đến 23)
  • %M: Phút (00 đến 59)
  • %S: Giây (00 đến 59)

Chuyển chuỗi thành datetime với strptime()

Phương thức strptime() (String Parse Time) cho phép bạn ép kiểu một chuỗi ký tự thành đối tượng datetime để phục vụ tính toán:

from datetime import datetime

date_string = "15/08/2025 09:30:00"
format_pattern = "%d/%m/%Y %H:%M:%S"

# Chuyển đổi chuỗi thành đối tượng datetime
parsed_date = datetime.strptime(date_string, format_pattern)
print("Đối tượng datetime:", parsed_date)
print("Kiểu dữ liệu:", type(parsed_date))

3. Tính Toán Khoảng Thời Gian Với Timedelta

Để thực hiện các phép cộng, trừ ngày tháng (ví dụ: tính thời hạn bảo hành, tính tuổi, hoặc đếm ngược sự kiện), Python sử dụng lớp timedelta.

from datetime import datetime, timedelta

now = datetime.now()

# Cộng thêm 7 ngày
future_date = now + timedelta(days=7)
print("7 ngày sau:", future_date.strftime("%d/%m/%Y"))

# Trừ đi 3 giờ 30 phút
past_time = now - timedelta(hours=3, minutes=30)
print("3 giờ 30 phút trước:", past_time.strftime("%H:%M:%S"))

# Tính khoảng cách giữa hai mốc thời gian
event_date = datetime(2025, 12, 31, 23, 59, 59)
difference = event_date - now

print(f"Còn lại: {difference.days} ngày và {difference.seconds // 3600} giờ.")
print("Tổng số giây còn lại:", difference.total_seconds())

4. Khái Niệm Naive Và Aware Datetime

Thời gian trong Python được chia làm 2 loại:

  • Naive Object: Không chứa thông tin múi giờ. Dễ sử dụng nhưng có thể gây nhầm lẫn nếu ứng dụng chạy trên nhiều múi giờ khác nhau.
  • Aware Object: Chứa thông tin múi giờ (timezone), giúp xác định chính xác thời điểm tương đối so với UTC.

Từ Python 3.11, bạn có thể dễ dàng làm việc với múi giờ chuẩn UTC thông qua datetime.UTC hoặc lớp timezone:

from datetime import datetime, timezone, timedelta

# Lấy thời gian UTC hiện tại (Aware)
utc_now = datetime.now(timezone.utc)
print("Giờ UTC:", utc_now)

# Tạo múi giờ Việt Nam (UTC+7)
vn_timezone = timezone(timedelta(hours=7))
vn_now = datetime.now(vn_timezone)
print("Giờ Việt Nam:", vn_now)

5. Ví Dụ Thực Tế: Tạo Hệ Thống Nhắc Nhở Lịch Hẹn

Dưới đây là một ví dụ kết hợp giúp bạn kiểm tra và gửi thông báo nhắc nhở trước sự kiện 30 phút:

from datetime import datetime, timedelta

def check_reminder(event_time_str):
    # Parse chuỗi thời gian sự kiện
    event_time = datetime.strptime(event_time_str, "%Y-%m-%d %H:%M")
    
    # Tính thời điểm gửi nhắc nhở (trước 30 phút)
    reminder_time = event_time - timedelta(minutes=30)
    
    print(f"Thời gian sự kiện: {event_time.strftime('%d/%m/%Y %H:%M')}")
    print(f"Thời gian gửi nhắc nhở: {reminder_time.strftime('%d/%m/%Y %H:%M')}")
    
    # Kiểm tra xem đã đến lúc nhắc nhở chưa
    now = datetime.now()
    if now >= reminder_time and now < event_time:
        print("=> CẢNH BÁO: Sắp đến giờ diễn ra sự kiện!")
    elif now >= event_time:
        print("=> Sự kiện đã diễn ra.")
    else:
        print("=> Chưa đến thời gian nhắc nhở.")

# Chạy thử nghiệm
check_reminder("2025-06-20 15:00")

Kết Luận

Module datetime cung cấp đầy đủ công cụ mạnh mẽ để bạn xử lý mọi tác vụ liên quan đến ngày tháng và thời gian trong Python. Nắm vững cách chuyển đổi với strftime/strptime và tính toán khoảng thời gian bằng timedelta sẽ giúp bạn xây dựng các tính năng ứng dụng chính xác và tin cậy hơn.


Nguồn tham khảo


📚 Chuỗi bài: Lộ Trình Học Python Toàn Diện: Từ Con Số 0 Đến Ứng Dụng Thực Tế

Chuỗi 20 bài viết hướng dẫn lập trình Python theo lộ trình bài bản, giúp người mới bắt đầu nắm vững cú pháp nền tảng, tư duy lập trình hướng đối tượng, làm việc với dữ liệu và xây dựng ứng dụng thực tế.

  1. 1. Lộ Trình Python #1: Cài Đặt Môi Trường Và Viết Chương Trình Đầu Tiên
  2. 2. Lộ Trình Python #2: Biến Và Kiểu Dữ Liệu Cơ Bản Trong Python
  3. 3. Các Toán Tử Trong Python Và Cách Sử Dụng Chi Tiết
  4. 4. Cấu Trúc Điều Kiện If-Else Và Tư Duy Cấu Trúc Rẽ Nhánh Trong Python
  5. 5. Vòng Lặp For Và While Trong Python: Tối Ưu Hóa Việc Lặp Lại Công Việc
  6. 6. Xử Lý Chuỗi (String) Tối Ưu Trong Python
  7. 7. Làm Chủ Cấu Trúc Dữ Liệu List Và Tuple Trong Python
  8. 8. Quản Lý Dữ Liệu Với Dictionary Và Set Trong Python
  9. 9. Xây Dựng Hàm (Function) Và Quản Lý Phạm Vi Biến Trong Python
  10. 10. Xử Lý Lỗi Và Ngoại Lệ Với Try-Except Trong Python
  11. 11. Thao Tác Đọc Và Ghi File Trong Python: Hướng Dẫn Chi Tiết Từ A Đến Z
  12. 12. Quản Lý Module Và Package Trong Python: Từ Chia Nhỏ Mã Nguồn Đến Sử Dụng Pip
  13. 13. Lập Trình Hướng Đối Tượng (OOP): Class Và Object Cơ Bản Trong Python
  14. 14. Bốn Trụ Cột Cơ Bản Của OOP Trong Python: Đóng Gói, Kế Thừa, Đa Hình Và Trừu Tượng Hóa
  15. 15. Xử Lý Ngày Tháng Và Thời Gian Với Module Datetime Trong Python ← Bạn đang đọc
  16. 16. Làm Việc Với Dữ Liệu Định Dạng JSON Vượt Trội Trong Python
  17. 17. Cơ Bản Về Crawl Dữ Liệu Web Với BeautifulSoup
  18. 18. Xử Lý Dữ Liệu Bảng Cơ Bản Với Pandas
  19. 19. Xây Dựng RESTful API Đơn Giản Với Flask
  20. 20. Dự Án Cuối Khóa: Tự Động Hóa Công Việc Hàng Ngày Với Python

← Bài trước: Bốn Trụ Cột Cơ Bản Của OOP Trong Python: Đóng Gói, Kế Thừa, Đa Hình Và Trừu Tượng Hóa Bài tiếp theo: Làm Việc Với Dữ Liệu Định Dạng JSON Vượt Trội Trong Python →

Nhận xét