- Sản phẩm & Dịch vụSản phẩm & Dịch vụ
- Giải phápGiải pháp
- Bảng giáBảng giá
- Công tyCông ty
- Tài liệuTài liệu
vi
vi
Chuyên mục với các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.
Technical Writer
I have over 5 years of experience writing technical documentation for tech products, making them accessible and user-friendly. My focus is always on providing clear and precise information. @#@ Tôi đã có hơn 5 năm kinh nghiệm viết tài liệu kỹ thuật cho các sản phẩm công nghệ, giúp người dùng dễ dàng tiếp cận và sử dụng. Tôi luôn tập trung vào việc cung cấp thông tin chính xác và dễ hiểu.
Thảo luận (0)
Đăng nhập để thảo luận
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.

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ụ 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 datetimedatetime_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ụ 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 datetimedate_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ụ 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 datetimetime_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ụ 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 localelocale.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.
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ụ 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 timetime_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.
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 timedefault 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.
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 timedatetime_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'
Để 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 datetimedate_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
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 datetimedate_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
Đầ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 datetimedate_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
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 datetimedate_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
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 datetimedate_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
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 reregex = 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:
mm nằm trong khoảng từ 01 đến 12 (tháng).dd nằm trong khoảng từ 01 đến 31 (ngày).yyyy là một năm có bốn chữ số.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.