Trong bài viết này, VietnamWorks inTECH sẽ hướng dẫn các bạn cách chuyển đổi chuỗi thành ngày giờ trong Python với Strptime.

Module là một tệp Python chứa code cần thiết để thực thi một chức năng riêng lẻ. Tệp này được nhập vào ứng dụng nhằm giúp chúng ta có thể thực hiện một tác vụ cụ thể nào đó.

Datetime là một trong những module nêu trên, dùng để làm việc và thao tác với thời gian và ngày tháng. Module này bao gồm class datetime, từ đó cung cấp các phương thức class strptime(). Phương thức này tạo một đối tượng datetime từ một chuỗi biểu diễn ngày và giờ tương ứng.

Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng phương thức datetime.strptime() để chuyển đổi chuỗi thành đối tượng datetime.

Đầu tiên hãy cùng tìm hiểu phương thức datetime.strptime() nhé!

1. Phương thức datetime.strptime() trong Python có nghĩa là gì? 

Cú pháp chung cho phương thức datetime.strptime() sẽ trông như sau:

datetime.strptime(date_string, format_code)

Cùng phân tích từng thành phần nhé

Đầu tiên datetime là tên class

Sau đó, strptime() là tên phương thức. Phương thức này chấp nhận hai đối số chuỗi bắt buộc .

  • Đối số bắt buộc đầu tiên là date_string biểu diễn chuỗi của ngày bạn muốn chuyển đổi thành đối tượng datetime.

  • Đối số bắt buộc thứ hai là format_code một định dạng cụ thể để giúp bạn chuyển đổi chuỗi thành đối tượng datetime.

Dưới đây là danh sách ngắn gọn về một số định dạng code được sử dụng phổ biến nhất mà bạn có thể gặp:

%d- ngày trong tháng dưới dạng số thập phân, chẳng hạn như 28.

%a- tên viết tắt của một ngày, chẳng hạn như Sun.

%A- tên đầy đủ của một ngày, chẳng hạn như Sunday.

%m- tháng dưới dạng số thập phân, chẳng hạn như 01.

%b- tên viết tắt của tháng, chẳng hạn như Jan.

%B- tên đầy đủ của tháng, chẳng hạn như January.

%y- năm không có thế kỷ, chẳng hạn như 23.

%Y- năm với thế kỷ, chẳng hạn như 2023.

%H- giờ trong ngày ở định dạng 24 giờ, chẳng hạn như 08.

%I- giờ trong ngày ở định dạng 12 giờ.

%M- số phút trong một giờ, chẳng hạn như 20.

%S- số giây trong một phút, chẳng hạn như 00.

Để xem đầy đủ tất cả các mã định dạng cho datetime.strptime(), hãy tham khảo tài liệu tại đây.

2. Cách sử dụng phương thức datetime.strptime() trong Python

Giả sử ta có chuỗi sau đại diện cho ngày và giờ:

28/01/23  08:20:00

Và output sẽ ra như sau:

2023-01-28 08:20:00

Làm thế nào chúng ta có thể thực hiện được điều đó?

Hãy xem đoạn code dưới đây:

# import the datetime class from the datetime module

from datetime import datetime

date_time_str = "28/01/23  08:20:00"

# check data type of date_time_str

print(type(date_time_str))

# output

# <class 'str'>

Đầu tiên, nhập module datetime bằng câu lệnh from datetime import datetime.

Sau đó, lưu chuỗi mà bạn muốn chuyển đổi thành đối tượng datetime trong một biến có tên date_time_str và kiểm tra loại hình của nó bằng hàm type(). Output sẽ cho biết đó là một chuỗi.

Bây giờ, hãy chuyển đổi chuỗi thành đối tượng datetime bằng phương thức strptime() của class datetime và kiểm tra kiểu dữ liệu:

from datetime import datetime

date_time_str = "28/01/23  08:20:00"

date_time_object = datetime.strptime(date_time_str, "%d/%m/%y %H:%M:%S")

print(date_time_object)

# check date_time_object_type

print(type(date_time_object))

# output

# 2023-01-28 08:20:00

# <class 'datetime.datetime'>

Mã định dạng cho chuỗi 28/01/23 08:20:00 là %d/%m/%y %H:%M:%S.

Các mã định dạng này biểu thị ngày trong tháng, tháng dưới dạng số thập phân, năm không có thế kỷ, giờ trong ngày, phút trong ngày và giây trong ngày, tương ứng.

Bây giờ, hãy thay đổi chuỗi ban đầu một chút.

Hãy thay đổi nó từ 28/01/23 thành 28 January 2023 và kiểm tra kiểu dữ liệu của date_time_str:

from datetime import datetime

date_time_str = "28 January 2023 08:20:00"

#check data type

print(type(date_time_str))

# output

# <class 'str'>

Bây giờ, hãy chuyển đổi date_time_str đối tượng sang datetime hãy nhớ rằng vì chuỗi này khác nhau nên bạn cũng phải thay đổi mã định dạng:

from datetime import datetime

date_time_str = "28 January 2023 08:20:00"

date_object = datetime.strptime(date_time_str, "%d %B %Y %H:%M:%S")

print(date_object)

#check data type

print(type(date_object))

# output

# 2023-01-28 08:20:00

# <class 'datetime.datetime'>

Mã định dạng cho chuỗi 28 January 2023 08:20:00 là %d %B %Y %H:%M:%S.

Bởi vì chúng ta đã thay đổi tháng Một từ biểu diễn số thập phân - 01, thành tên đầy đủ - January, nên chúng ta cũng cần thay đổi mã định dạng của nó – từ %m thành %B.

3. Cách chuyển đổi chuỗi thành đối tượng datetime.date() trong Python

Điều gì sẽ xảy ra nếu bạn chỉ muốn chuyển đổi ngày chứ không muốn chuyển đổi thời gian từ một chuỗi?

Bạn có thể chỉ muốn chuyển đổi một phần 28/01/23 của chuỗi 28/01/23 08:20:00 thành một đối tượng.

Để chuyển đổi một chuỗi thành một đối tượng ngày tháng, chúng ta sẽ sử dụng phương thức strptime() như bạn đã thấy trong phần trước, nhưng bạn cũng sẽ sử dụng phương thức datetime.date() này để chỉ trích xuất ngày tháng.

from datetime import datetime

date_time_str = "28 January 2023 08:20:00"

date_object = datetime.strptime(date_time_str, "%d %B %Y %H:%M:%S").date()

print(date_object)

#check data type

print(type(date_object))

# output

# 2023-01-28

# <class 'datetime.date'>

Và để chỉ chuyển đổi phần thời gian, 08:20:00 từ chuỗi 28/01/23 08:20:00, ta sẽ sử dụng phương thức datetime.time() này để trích xuất thời gian:

from datetime import datetime

date_time_str = "28 January 2023 08:20:00"

date_object = datetime.strptime(date_time_str, "%d %B %Y %H:%M:%S").time()

print(date_object)

print(type(date_object))

# output

# 08:20:00

# <class 'datetime.time'>

4. Tại sao lại nhận được thông báo Valueerror khi sử dụng datetime.strptime() trong Python?

Một điều cần lưu ý là chuỗi bạn truyền làm đối số cho phương thức strptime() cần phải có định dạng cụ thể – không phải bất kỳ chuỗi nào cũng được chuyển đổi thành đối tượng datetime. Cụ thể năm, tháng, ngày trong chuỗi phải trùng với mã định dạng.

Ví dụ: mã định dạng cho tháng trong chuỗi 28/01/23 phải là %m, biểu thị tháng dưới dạng số thập phân.

Điều gì xảy ra khi sử dụng mã định dạng %B thay thế?

from datetime import datetime

date_time_str = "28/01/23  08:20:00"

date_time_object = datetime.strptime(date_time_str, "%d/%B/%y %H:%M:%S")

print(date_time_object)

# output

# raise ValueError("time data %r does not match format %r" %

# ValueError: time data '28/01/23  08:20:00' does not match format '%d/%B/%y # %H:%M:%S'

Bạn sẽ nhận được một ValueError!

Mã định dạng %B thể hiện tên đầy đủ của tháng, chẳng hạn như January, chứ không phải 01.

Vì vậy, nếu chuỗi được truyền tới strptime() không khớp với định dạng đã chỉ định thì bạn sẽ nhận được một thông báo ValueError.

Để giải quyết vấn đề này, bạn có thể kiểm tra và xử lý lỗi bằng cách sử dụng một block try-except, như sau:

from datetime import datetime

date_time_str = "28/01/23  08:20:00"

try:

  date_time_object = datetime.strptime(date_time_str, "%d/%B/%y %H:%M:%S")

except ValueError as error:

  print('A ValueError is raised because :', error)

# output

# A ValueError is raised because : time data '28/01/23  08:20:00' does not # match format '%d/%B/%y %H:%M:%S'

Lời kết

Hy vọng thông qua bài viết này các bạn đã hiểu rõ hơn cách sử chuyển đổi chuyển thành một đối tượng datatime bằng phương thức strptime() trong Python. Cảm ơn bạn đã dành thời gian để đọc, nếu thấy hay đừng quên chia sẻ cho bạn bè cùng biết nhé!

VietnamWorks inTECH

TẠO TÀI KHOẢN MỚI: XEM FULL “1 TÁCH CODEFEE” - NHẬN SLOT TƯ VẤN CV TỪ CHUYÊN GIA - CƠ HỘI RINH VỀ VOUCHER 200K