Cách phân tích chuỗi thành ngày giờ trong Python (strptime)

Tìm hiểu cách chuyển đổi chuỗi thành đối tượng datetime trong Python. Nắm vững phương thức strptime, phân tích chuỗi ngày, xử lý múi giờ và ngăn ngừa lỗi định dạng.

Hãy thử Giải pháp này trong Trình chỉnh sửa

Tổng quan

Khi xây dựng các ứng dụng xử lý việc gửi biểu mẫu của người dùng, thu thập cơ sở dữ liệu web, phân tích nhật ký máy chủ hoặc nhập trang tính CSV, bạn sẽ thường xuyên nhận được thông tin ngày và giờ dưới dạng chuỗi văn bản thô (ví dụ: `"2026-05-25 15:45"`). Vì bạn không thể thực hiện các phép tính, số học ngày tháng hoặc sắp xếp theo chuỗi nên bạn phải phân tích chúng thành các đối tượng datetime của Python.

Phương thức chính cho chuyển đổi này là `datetime.strptime(date_string, format_string)`. Tên này là viết tắt của "thời gian phân tích chuỗi". Hàm lấy chuỗi ngày thô và một mẫu định dạng chứa các chỉ thị (như `%Y` cho năm, `%m` cho tháng và `%d` cho ngày) và trả về một đối tượng ngày giờ tương ứng.

Nếu chuỗi đầu vào không khớp chính xác với mẫu định dạng được cung cấp, Python sẽ đưa ra `ValueError`. Để tránh sự cố, hãy luôn gói các hoạt động `strptime()` trong khối `try-ngoại trừ`. Đối với các ứng dụng phân tích cú pháp dữ liệu đầu vào ngày đa dạng, không có cấu trúc, các thư viện bên ngoài như `python-dateutil` có thể giúp tự động phát hiện trình phân tích cú pháp.

Đầu ra mã & thực thi

Tập lệnh này minh họa việc phân tích cú pháp chuỗi ngày bằng cách sử dụng datetime.strptime, xử lý dữ liệu đầu vào không hợp lệ và tính toán chênh lệch ngày.

from datetime import datetime

# 1. Basic parsing using strptime
date_str = "2026-05-25 18:30:00"
format_template = "%Y-%m-%d %H:%M:%S"

parsed_date = datetime.strptime(date_str, format_template)
print("Parsed DateTime:", parsed_date)
print("Month parsed:", parsed_date.month)
print("Hour parsed:", parsed_date.hour)

# 2. Handling parse errors safely
bad_date_str = "25/05/2026"
try:
    datetime.strptime(bad_date_str, "%Y-%m-%d")
except ValueError as e:
    print(f"\nParse Error: {e}")

# Correcting the format
corrected_date = datetime.strptime(bad_date_str, "%d/%m/%Y")
print("Corrected Parse:", corrected_date.date())
Đầu ra thiết bị đầu cuối
Parsed DateTime: 2026-05-25 18:30:00
Month parsed: 5
Hour parsed: 18

Parse Error: time data '25/05/2026' does not match format '%Y-%m-%d'
Corrected Parse: 2026-05-25

Triển khai từng bước

  • Nhập lớp datetime từ mô-đun datetime.
  • Xác định cấu trúc chính xác của chuỗi ngày của bạn (ví dụ: ngày, tháng, dấu phân cách).
  • Gọi datetime.strptime(date_string, format_pattern) với các lệnh thích hợp (như %Y, %m, %d).
  • Gói câu lệnh phân tích cú pháp trong khối ValueError thử ngoại trừ để xử lý các chuỗi không đúng định dạng một cách duyên dáng.

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

Sự khác biệt giữa strftime và strptime là gì?

strptime (thời gian phân tích chuỗi) phân tích một chuỗi để tạo đối tượng datetime. strftime (thời gian định dạng chuỗi) định dạng một đối tượng datetime thành một chuỗi biểu diễn có thể đọc được.

Làm cách nào để phân tích cú pháp chuỗi ngày ISO 8601 (ví dụ: "2026-05-25T18:30:00Z")?

TrongPython 3.7+, bạn có thể sử dụng hàm datetime.fromisoformat(string) tích hợp sẵn, hàm này xử lý các chuỗi ISO một cách hiệu quả mà không yêu cầu mẫu định dạng thủ cô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.