Chuyển string sang datetime trong python | Laptrinhcanban.com

Chuyển string sang datetime trong python

Hướng dẫn cách chuyển string sang datetime trong python. Bạn sẽ học được cách chuyển string sang datetime bằng phương thức strptime() trong python cũng như cách định dạng thời gian của kết quả đầu ra với bảng định dạng ngày tháng năm trong python sau bài học này.

Chúng ta có thể chuyển string sang datetime trong python bằng cách sử dụng sử dụng phương thức strptime() trong python. Tùy vào trường hợp mà chúng ta có thể định dạng đầu ra datetime giống với định dạng đầu vào của chuỗi hoặc là với một định dạng hoàn toàn khác. Sau khi chuyển string sang datetime trong python, chúng ta có thể tính toán thời gian được ghi ở chuỗi ban đầu, ví dụ như là cộng trừ ngày tháng trong Python hoặc là lấy ngày tháng năm và giờ từ datetime chẳng hạn.

Lại nữa, nếu bạn muốn làm ngược lại, hãy xem bài viết: Chuyển datetime sang string trong python.

Chuyển string sang datetime trong python

Cú pháp chuyển string sang datetime trong python

Bạn có thể sử dụng phương thức strptime() trong python của module datetime để phân tích một chuỗi string chứa giá trị ngày giờ, sau đó chuyển chuỗi đó sang dạng datime trong python, với cú pháp sau đây:

datetime.strptime(date_string, format)

Trong đó:

  • datetime.strptime dùng để chỉ định tên phương thức
  • date_string là chuỗi string chứa giá trị ngày giờ được viết theo định dạng chỉ định tại format.
  • format là định dạng ngày tháng năm của chuỗi date_string, cũng như là của kết quả đầu ra.

Lưu ý là định dạng format phải đúng với định dạng thời gian được sử dụng trong chuỗi, ví dụ với chuỗi 2020/07/22 10:4:38" chúng ta cần chỉ định format là "%Y/%m/%d %H:%M:%S". Nếu không, lỗi sẽ xảy ra khi chạy chương trình.

Bảng định dạng ngày tháng năm trong chuỗi python

Định dạng ngày tháng năm trong python được chỉ định bằng bảng định dạng ngày tháng năm trong chuỗi python dưới đây:

FormatÝ nghĩa
%yNăm có hai chữ số 00, 01, …, 99
%YTháng có 4 chữ số 0001, 0002, …, 9999
%bViết tắt tên tháng Jan, Feb, …, Dec ※1
%BTên tháng January, February, …, December ※1
%mTháng 01, 02, …, 12
%dNgày 01, 02, …, 31
%HGiờ(24 giờ) 00, 01, …, 23
%IGiờ(12 giờ) 00, 01, …, 11
%pAM or PM ※1
%MPhút 00, 01, …, 59
%SGiây 00, 01, …, 59
%fMicro giây 000000, 000001, …, 999999
%zTime zone, +0000, -0400 etc
%ZTime zone UTC, EST

※1: Giá trị sẽ thay đổi thích hợp tùy theo local đã đặt. Về cách chỉ định locale hãy xem chi tiết ở bài Chỉ định locale trong datetime python

Sau đây chúng ta hãy cùng xem các ví dụ cụ thể về cách chuyển string sang datetime trong python như sau:

Chuyển string sang datetime trong python với định dạng đầu vào và đầu ra giống nhau

Giả sử chúng ta có một chuỗi string chứa thông tin thời gian, và một format tương ứng với cách viết thời gian trong chuỗi string đó, thông qua bảng định dạng ngày tháng năm trong chuỗi python. Chúng ta sẽ chuyển chuỗi string này sâng định dạng format thời gian tương ứng với nó như sau:

import datetime

date_str = "2020/07/22 10:4:38"
date_format = "%Y/%m/%d %H:%M:%S"

dt = datetime.datetime.strptime(date_str,date_format)
print(type(dt))
print(dt)

#>> <class 'datetime.datetime'>
#>> 2020-07-22 10:04:38

Một số ví dụ khác:

import datetime

str1 = "2020/07/22 13:37:4:33217"
str2 = "07/22/2020 PM 1:37:4:33217"
str3 = "July 22,2020 13:37:4:33217+09:00"

dt1 = datetime.datetime.strptime(str1, "%Y/%m/%d %H:%M:%S:%f")
dt2 = datetime.datetime.strptime(str2, "%m/%d/%Y %p %I:%M:%S:%f")
dt3 = datetime.datetime.strptime(str3, "%B %d,%Y %H:%M:%S:%f%z")

print(dt1)
#>> 2020-07-22 13:37:04.332170
print(dt2)
#>> 2020-07-22 13:37:04.332170
print(dt3)
#>> 2020-07-22 13:37:04.332170+09:00

Lưu ý là chúng ta cần chỉ định định dạng format của chuỗi string phải phù hợp với chuỗi string đó. Trong trường hợp chuỗi string có định dạng khác với format, lỗi ValueError sẽ xảy ra:

import datetime

date_str = "2020/15/22 10:4:38"
date_format = "%Y/%m/%d %H:%M:%S"
dt = datetime.datetime.strptime(date_str, date_format)

Lỗi trả về:

ValueError: time data '2020/15/22 10:4:38' does not match format '%Y/%m/%d %H:%M:%S'

Chuyển string sang datetime trong python với định dạng đầu vào và đầu ra khác nhau

Ở phần trên chúng ta đã biết cần chỉ định định dạng format của chuỗi phải đúng với định dạng thời gian được sử dụng trong chuỗi string ban đầu.

Điều này sẽ gây khó khăn cho chúng ta khi muốn tạo ra một datetime với định dạng format hoàn toàn khác với định dạng trong chuỗi. Ví dụ như chuỗi ban đầu có định dạng "Wednesday, May 04, 2021" nhưng chúng ta muốn datetime có định dạng là 2020/15/22 10:4:38 chẳng hạn.

Trong trường hợp này, sau khi đã chuyển chuỗi string ban đầu sang datetime rồi, chúng ta cần phải thêm xử lý chuyển datetime thu được sang string với định dạng format khác, sau đó mới chuyển lại string có kiểu format khác đó sang datetime và thu về kết quả cuối cùng.

Chuyển string sang datetime trong python

Chúng ta sẽ sử dụng kết hợp phương thức strftime() với các bước sau đây:
Bước 1: Chuyển string sang datetime trong python

import datetime

date_str = 'Wednesday, May 04, 2021'
date_format= '%A, %B %d, %Y'
result_format= '%Y/%m/%d'
date_dt = datetime.datetime.strptime(date_str, date_format)
print(type(date_dt))
print(date_dt)
#>> <class 'datetime.datetime'>
#>> 2021-05-04 00:00:00

Bước 2:Chuyển datetime kết quả sang string với định dạng format khác

#Thay đổi định dạng datetime trong python
date_dt_str = date_dt.strftime(result_format)

print(type(date_dt_str))
print(date_dt_str)
#>> <class 'str'>
#>> 2021/05/04

Bước 3:Chuyển lại string với định dạng format khác sang dạng datetime và thu về kết quả cuối cùng

date_dt_result =  datetime.datetime.strptime(date_dt_str, result_format)
print(type(date_dt_result))
print(date_dt_result)
#>> <class 'datetime.datetime'>
#>> 2021-05-04 00:00:00

Tổng hợp lại, chúng ta viết mã lệnh như sau:

import datetime

date_str = 'Wednesday, May 04, 2021'
date_format= '%A, %B %d, %Y'
result_format= '%Y/%m/%d'

date_dt = datetime.datetime.strptime(date_str, date_format)
date_dt_str = date_dt.strftime(result_format)
date_dt_result = datetime.datetime.strptime(date_dt_str, result_format)

print(type(date_dt_result))
print(date_dt_result)
#>> <class 'datetime.datetime'>
#>> 2021-05-04 00:00:00

Tính toán thời gian sau khi chuyển string sang datetime trong python

Sau khi đã chuyển string sang datetime trong python, thông tin thời gian ở chuỗi string ban đầu đã được chuyển sang dạng datetime, do đó chúng ta có thể tiến hành các xử lý tính toán với datetime này.

Ví dụ, chúng ta có thể lấy ngày tháng năm và giờ từ datetime như sau:

import datetime
dt = datetime.datetime.strptime("2020/07/22 10:4:38","%Y/%m/%d %H:%M:%S")

print(dt.year)
#>> 2020

print(dt.minute)
#>> 4

Chúng ta cũng có thể cộng trừ ngày tháng với datetime thu được như sau:

import datetime
dt = datetime.datetime.strptime("2020/07/22 10:4:38","%Y/%m/%d %H:%M:%S")

dt2 = dt + datetime.timedelta(days=1)
print(dt2)
#>> 2020-07-23 10:04:38

dt3 = dt - datetime.timedelta(days=8)
print(dt3)
#>> 2020-07-14 10:04:38

Tổng kết và thực hành

Trên đây Kiyoshi đã hướng dẫn bạn về cách chuyển string sang datetime trong python rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Trong trường hợp bạn muốn chuyển ngược lại giữa string và dattime, hãy tham khảo bài viết chuyển datetime sang string trong python nhé.

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.