Cả hai module datetime và time của Python đều có một phương thức strptime(). Trong bài viết này, chúng ta sẽ sử dụng nó để chuyển đổi chuỗi thành đối tượng datetime và time.

Chuyển đổi chuỗi thành đối tượng datetime bằng datetime.strptime()
Phương thức datetime.strptime() có cú pháp như sau:
datetime.strptime(date_string, format)
Phương thức này trả về một đối tượng datetime khớp với chuỗi ngày giờ date_string được phân tích bởi format. Cả hai tham số đều là bắt buộc và phải ở dạng chuỗi.
Để biết thêm chi tiết về các chỉ thị định dạng được sử dụng trong datetime.strptime(), hãy tham khảo mục Format Code của strftime() và strptime() trong tài liệu chính thức của Python.
Ví dụ chuyển đổi chuỗi thành datetime.datetime()
Ví dụ sau đây chuyển đổi một chuỗi ngày và giờ thành đối tượng datetime.datetime(), sau đó in ra tên class và giá trị của đối tượng kết quả:
from datetime import datetime
datetime_str = '09/19/22 13:55:26'
datetime_object = datetime.strptime(datetime_str, '%m/%d/%y %H:%M:%S')
print(type(datetime_object))
print(datetime_object) # printed in default format
Kết quả đầu ra:
<class 'datetime.datetime'>
2022-09-19 13:55:26
Ví dụ chuyển đổi chuỗi thành datetime.date()
Ví dụ sau đây chuyển đổi một chuỗi ngày tháng thành đối tượng datetime.date(), sau đó in ra kiểu class và giá trị của đối tượng kết quả:
from datetime import datetime
date_str = '09-19-2022'
date_object = datetime.strptime(date_str, '%m-%d-%Y').date()
print(type(date_object))
print(date_object) # printed in default format
Kết quả đầu ra:
<class 'datetime.date'>
2022-09-19
Ví dụ chuyển đổi chuỗi thành datetime.time()
Ví dụ sau đây chuyển đổi một chuỗi thời gian thành đối tượng datetime.time(), sau đó in ra kiểu class và giá trị của đối tượng kết quả:
from datetime import datetime
time_str = '13::55::26'
time_object = datetime.strptime(time_str, '%H::%M::%S').time()
print(type(time_object))
print(time_object)
Kết quả đầu ra:
<class 'datetime.time'>
13:55:26
Ví dụ chuyển đổi chuỗi thành datetime.datetime() với locale
Ví dụ sau đây chuyển đổi một chuỗi ngày tháng theo locale (định dạng ngày, số, tiền tệ,v.v… cho từng nơi) của Đức thành đối tượng datetime.datetime(), sau đó in ra kiểu class và giá trị của đối tượng kết quả:
from datetime import datetime
import locale
locale.setlocale(locale.LC_ALL, 'de_DE')
date_str_de_DE = '16-Dezember-2022 Freitag' # de_DE locale
datetime_object = datetime.strptime(date_str_de_DE, '%d-%B-%Y %A')
print(type(datetime_object))
print(datetime_object)
Kết quả đầu ra:
<class 'datetime.datetime'>
2022-12-16 00:00:00
Lưu ý rằng đối tượng kết quả không bao gồm tên của ngày trong tuần từ chuỗi đầu vào, vì đối tượng datetime.datetime() chỉ chứa thông tin về ngày trong tuần dưới dạng một số thập phân.
Chuyển đổi chuỗi thành struct_time bằng time.strptime()
Phương thức time.strptime() có cú pháp như sau:
time.strptime(time_string[, format])
Phương thức time.strptime() trả về một đối tượng time.struct_time khớp với time_string được parse bởi format. Tham số time_string là bắt buộc và cả hai tham số đều phải là chuỗi. Nếu format không được cung cấp, giá trị mặc định sẽ là:
'%a %b %d %H:%M:%S %Y'
Định dạng này tương ứng với định dạng được trả về bởi hàm ctime().
Các chỉ thị định dạng cho time.strptime() và datetime.strptime() là giống nhau. Bạn có thể tìm hiểu thêm về các chỉ thị định dạng cho module time trong tài liệu của Python.
Ví dụ chuyển đổi chuỗi thành đối tượng struct_time với format được cung cấp
Ví dụ sau đây chuyển đổi một chuỗi thời gian thành đối tượng time.struct_time() bằng cách cung cấp tham số format, sau đó in ra giá trị của đối tượng kết quả:
import time
time_str = '11::33::54'
time_obj = time.strptime(time_str, '%H::%M::%S')
print("A time.struct_time object that uses the format provided:")
print(time_obj)
Kết quả đầu ra:
A time.struct_time object that uses the format provided:
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1,
tm_hour=11, tm_min=33, tm_sec=54, tm_wday=0, tm_yday=1,
tm_isdst=-1)
Như kết quả ở trên cho thấy, khi ta chuyển đổi một chuỗi thành đối tượng time.struct_time(), phương thức strptime() sẽ sử dụng các giá trị giữ chỗ (placeholder) cho bất kỳ chỉ thị định dạng nào không được định nghĩa trong tham số format.
Ví dụ chuyển đổi chuỗi thành đối tượng struct_time sử dụng định dạng mặc định
Nếu bạn không cung cấp tham số format khi chuyển đổi một chuỗi thời gian thành đối tượng time.struct_time(), định dạng mặc định sẽ được sử dụng và một lỗi sẽ xảy ra nếu chuỗi đầu vào không khớp chính xác với định dạng mặc định sau:
'%a %b %d %H:%M:%S %Y'
Ví dụ sau đây chuyển đổi một chuỗi thời gian thành đối tượng time.struct_time() mà không cung cấp tham số format, sau đó in ra giá trị của đối tượng kết quả:
import time
# default format - "%a %b %d %H:%M:%S %Y"
time_str_default = 'Mon Dec 12 14:55:02 2022'
time_obj_default = time.strptime(time_str_default)
print("A time.struct_time object that uses the default format:")
print(time_obj_default)
Kết quả đầu ra:
A time.struct_time object that uses the default format:
time.struct_time(tm_year=2022, tm_mon=12, tm_mday=12,
tm_hour=14, tm_min=55, tm_sec=2, tm_wday=0, tm_yday=346,
tm_isdst=-1)
Như kết quả trên đã cho thấy, khi ta chuyển đổi một chuỗi thành đối tượng time.struct_time(), phương thức strptime() sẽ sử dụng các giá trị giữ chỗ cho bất kỳ chỉ thị định dạng nào không được định nghĩa trong tham số format hoặc bởi định dạng mặc định nếu không có format nào được cung cấp.
Xử lý lỗi của strptime()
Nếu chuỗi đầu vào không thể được parse bởi strptime() bằng định dạng đã cung cấp, lỗi ValueError sẽ xảy ra. Ta có thể sử dụng khối try...except để kiểm tra các lỗi phân tích này, cùng với khối finally để in kết quả. Các thông báo ValueError nhận được khi sử dụng phương thức strptime() giải thích rất rõ ràng nguyên nhân của lỗi.
Ví dụ sau đây minh họa một số lỗi thường gặp, chẳng hạn như có dữ liệu thừa hoặc định dạng không khớp:
from datetime import datetime
import time
datetime_str = '09/19/18 13:55:26'
try:
datetime_object = datetime.strptime(datetime_str, '%m/%d/%y')
except ValueError as ve1:
print('ValueError 1:', ve1)
time_str = '99::55::26'
try:
time_object = time.strptime(time_str, '%H::%M::%S')
except ValueError as ve2:
print('ValueError 2:', ve2)
Kết quả đầu ra:
ValueError 1: unconverted data remains: 13:55:26
ValueError 2: time data '99::55::26' does not match format '%H::%M::%S'
Câu hỏi thường gặp (FAQs)
Làm thế nào để chuyển đổi chuỗi ngày tháng mm dd yyyy của Python sang datetime?
Để chuyển đổi một chuỗi ngày tháng ở định dạng mm dd yyyy sang đối tượng datetime trong Python, bạn có thể sử dụng phương thức strptime() từ module datetime:
from datetime import datetime
date_string = "12 25 2024"
date_object = datetime.strptime(date_string, "%m %d %Y")
print(date_object)
Kết quả đầu ra:
2024-12-25 00:00:00
Làm thế nào để chuyển đổi một chuỗi sang ngày tháng ở định dạng mm dd yyyy?
Bạn có thể chuyển chuỗi thành đối tượng datetime và sau đó chỉ trích xuất phần ngày tháng:
from datetime import datetime
date_string = "12 25 2024"
date_object = datetime.strptime(date_string, "%m %d %Y").date()
print(date_object)
Kết quả đầu ra:
12 25 2024
Làm thế nào để chuyển đổi một chuỗi sang định dạng yyyy-mm-dd trong Python?
Đầu tiên, hãy chuyển chuỗi thành đối tượng datetime rồi định dạng nó thành chuỗi yyyy-mm-dd mong muốn:
from datetime import datetime
date_string = "12 25 2024"
date_object = datetime.strptime(date_string, "%m %d %Y")
formatted_date = date_object.strftime("%Y-%m-%d")
print(formatted_date)
Kết quả đầu ra:
2024-12-25
Làm thế nào để chuyển đổi đối tượng datetime sang định dạng dd, mm, yyyy trong Python?
Bạn có thể sử dụng phương thức strftime() để định dạng một đối tượng datetime thành một định dạng chuỗi cụ thể:
from datetime import datetime
date_object = datetime(2024, 12, 25)
formatted_date = date_object.strftime("%d, %m, %Y")
print(formatted_date)
Kết quả đầu ra là:
25, 12, 2024
Làm thế nào để chuyển đổi một chuỗi sang datetime trong Python?
Phương thức datetime.strptime() có thể được sử dụng để chuyển một chuỗi thành đối tượng datetime. Ví dụ:
from datetime import datetime
date_string = "2024-12-25"
date_object = datetime.strptime(date_string, "%Y-%m-%d")
print(date_object)
Kết quả đầu ra:
2024-12-25 00:00:00
Biểu thức chính quy cho định dạng ngày tháng mm dd yyyy trong Python là gì?
Một biểu thức chính quy để khớp với chuỗi ngày tháng ở định dạng mm dd yyyy có dạng như sau:
import re
regex = r"^(0[1-9]|1[0-2]) ([0-2][0-9]|3[01]) (\\d{4})$"
date_string = "12 25 2024"
if re.match(regex, date_string):
print("Valid date format")
else:
print("Invalid date format")
Biểu thức chính quy này đảm bảo:
mmnằm trong khoảng từ 01 đến 12 (tháng).ddnằm trong khoảng từ 01 đến 31 (ngày).yyyylà một năm có bốn chữ số.
Tổng kết
Trong bài hướng dẫn này, ta đã học cách chuyển đổi các chuỗi ngày và giờ thành đối tượng datetime và time bằng Python. Ngoài ra, bạn cũng đã biết cách phát hiện và khắc phục một số lỗi thường gặp khi định dạng không khớp với dữ liệu đầu vào. Thực hành các ví dụ sẽ giúp bạn hiểu rõ hơn và áp dụng linh hoạt trong nhiều tình huống xử lý dữ liệu khác nhau.