Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Chuyển chuỗi Python thành DateTime trong Python
Trong bài viết này, mình sẽ tìm hiểu cách chuyển đổi một chuỗi thành đối tượng ngày giờ trong Python bằng cách sử dụng hàm strptime() cùng với các mã định dạng ngày thường được sử dụng. Bên cạnh đó, mình cũng sẽ khám phá cách sử dụng các phương thức tương tự từ các mô-đun khác để thực hiện việc chuyển đổi này.
Các bước để chuyển đổi chuỗi thành datetime trong Python
Trong một số trường hợp, ngày và giờ có thể được chuyển thành đối tượng chuỗi. Để chuyển đổi một chuỗi thành một datetime
đối tượng, mình có thể sử dụng strptime()
chức năng của mô-đun datetime
.
Ví dụ: bạn có thể cần chuyển đổi một chuỗi số như 17-06-2022 thành một datetime
đối tượng,hoặc bạn muốn chuyển đổi chuỗi đại diện cho các ngày như Thứ Hai, ngày 17 tháng 6 năm 2021 thành một datetime
đối tượng.
Các bước dưới đây cho thấy cách chuyển đổi một chuỗi biểu thị ngày thành đối tượng ngày giờ.
Bài viết này được đăng tại [free tuts .net]
Bước 1: Nhập mô-đun ngày giờ.
Trước hết, bạn cần phải nhập mô-đun datetime
để có thể sử dụng các lớp và hàm liên quan đến thời gian và ngày giờ.
from datetime import datetime
Bước 2: Sử dụng hàm strptime() của lớp datetime.
Hàm strptime()
cho phép bạn phân tích một chuỗi theo định dạng cho trước và tạo ra một đối tượng datetime từ chuỗi đó. Định dạng được sử dụng để chỉ ra cách chuỗi được biểu diễn theo ngày giờ.
date_string = "2023-08-16 15:30:00" date_format = "%Y-%m-%d %H:%M:%S" converted_datetime = datetime.strptime(date_string, date_format) print(converted_datetime)
Trong ví dụ trên, date_string
là chuỗi bạn muốn chuyển đổi và date_format
là định dạng của chuỗi đó. Trong trường hợp này, chuỗi có định dạng 'YYYY-MM-DD HH:MM:SS'
, tương ứng với năm, tháng, ngày, giờ, phút và giây.
Bước 3: Sử dụng hàm strptime() của mô-đun thời gian.
Ngoài việc sử dụng strptime()
từ lớp datetime, bạn cũng có thể sử dụng strptime()
từ mô-đun time. Tuy nhiên, trong trường hợp này, bạn sẽ nhận được một đối tượng struct_time
.
import time date_string = "2023-08-16 15:30:00" date_format = "%Y-%m-%d %H:%M:%S" converted_struct_time = time.strptime(date_string, date_format) print(converted_struct_time)
Trong ví dụ này, converted_struct_time
sẽ là một đối tượng struct_time
chứa thông tin về năm, tháng, ngày, giờ, phút, giây và các thành phần khác của thời gian.
Ví dụ: Phân tích chuỗi thành ngày giờ
Cú pháp :
datetime.strptime(date_string, format)
Sau đây là ví dụ trong đó chúng tôi có một chuỗi biểu thị ngày và giờ ở định dạng chuẩn ( dd/mm/yyyy hh:mm:ss).
from datetime import datetime # Date String in dd/mm/yyyy HH:MM:SS format dt_string = "12/06/2021 09:15:32" # Convert string to datetime object dt_object = datetime.strptime(dt_string, "%d/%m/%Y %H:%M:%S") print(dt_object) # Output 2021-06-12 09:15:32
Đối tượng chuỗi đến ngày
Để làm điều này, bạn có thể sử dụng lớp datetime
từ mô-đun datetime
như sau:
from datetime import datetime # Chuỗi ngày cần chuyển đổi date_string = "2023-08-16" # Định dạng của chuỗi ngày date_format = "%Y-%m-%d" # Sử dụng datetime.strptime() để chuyển đổi chuỗi thành đối tượng datetime date_object = datetime.strptime(date_string, date_format).date() # In ra đối tượng ngày đã tạo print("Đối tượng ngày:", date_object)
Trong ví dụ này:
datetime.strptime()
được sử dụng để chuyển đổi chuỗi thành đối tượng datetime..date()
được sử dụng để lấy phần ngày của đối tượngdatetime
, tạo thành một đối tượng ngày riêng lẻ.
Lưu ý rằng phần giờ, phút và giây sẽ được đặt về giá trị mặc định (00:00:00) khi bạn lấy phần ngày từ đối tượng datetime.
Chuỗi thành time
đối tượng
Bạn có thể sử dụng datetime.time
lớp để chuyển đổi một chuỗi chứa thời gian thành một timeđối tượng.
- Đầu tiên, chuyển đổi một chuỗi thành một
datetime
đối tượng - Sử dụng
datetime.time()
chức năng để chỉ trích xuất timeđối tượng từ phiên bản datetime.
from datetime import datetime # Convert string to datetime.time object time_obj = datetime.strptime("12/06/2023 09:15:32", "%d/%m/%Y %H:%M:%S").time() print(time_obj) # Output 09:15:32
Lưu ý : Nếu một chuỗi đại diện cho thời gian không có ngày, chỉ sử dụng %H/%M/%S
mã định dạng.
t_object = datetime.strptime("11:45:23", "%H:%M:%S").time()
Chuỗi thành time
đối tượng bằng Mô-đun thời gian
Mình có thể sử dụng phương thức () của mô-đun thời gian strptime
để chuyển đổi thời gian ở định dạng chuỗi thành đối tượng thời gian ở time.struct_time
định dạng.
Cú pháp :
time.strptime(string[, format])
Mình hãy xem một ví dụ trong đó ta có một chuỗi đề cập đến thời gian ở định dạng giờ-phút-giây (hh:mm:ss).
Ví dụ :
import time # time hours-minutes-seconds format time_string = "09-15-09" format_codes = "%H-%M-%S" time_obj = time.strptime(time_string, format_codes) print("Time Object", time_obj) print(type(time_obj))
Làm thế nào strptime() hoạt động?
strptime()
là một phương thức của lớp datetime
trong Python, và nó được sử dụng để phân tích (parse) một chuỗi đại diện cho thời gian thành một đối tượng datetime
. Tên của phương thức có ý nghĩa như sau:
- "str" là viết tắt của "string" (chuỗi), là loại dữ liệu đầu vào bạn muốn phân tích.
- "ptime" đại diện cho "parsed time" (thời gian đã được phân tích).
Cú pháp của phương thức strptime()
như sau:
datetime.strptime(date_string, format)
Trong đó:
date_string
là chuỗi bạn muốn chuyển đổi thành đối tượng datetime.format
là định dạng của chuỗi, chỉ định cách mà chuỗi được biểu diễn theo ngày giờ.
Ví dụ, nếu bạn có một chuỗi "2023-08-16 15:30:00" và muốn chuyển nó thành một đối tượng datetime
, bạn có thể làm như sau:
from datetime import datetime date_string = "2023-08-16 15:30:00" date_format = "%Y-%m-%d %H:%M:%S" converted_datetime = datetime.strptime(date_string, date_format) print(converted_datetime)
Ở đây, "%Y-%m-%d %H:%M:%S"
là định dạng của chuỗi "2023-08-16 15:30:00", trong đó %Y đại diện cho năm, %m đại diện cho tháng, %d đại diện cho ngày, %H đại diện cho giờ (24h), %M đại diện cho phút và %S đại diện cho giây.
Khi bạn gọi datetime.strptime(date_string, date_format)
, phương thức sẽ phân tích chuỗi date_string
theo định dạng date_format
và tạo ra một đối tượng datetime
tương ứng.
strptime() mã định dạng
Khi bạn sử dụng phương thức strptime()
để chuyển đổi một chuỗi thành một đối tượng datetime, bạn cần xác định mã định dạng (format codes) để chỉ ra cách mà các phần của chuỗi biểu diễn ngày giờ. Dưới đây là một số mã định dạng phổ biến mà bạn có thể sử dụng trong strptime():
Mã định dạng | Sự miêu tả | Ví dụ |
---|---|---|
%d | Ngày trong tháng dưới dạng số thập phân không đệm. | CN, Mon, …, Sat (en_US); Vì vậy, Mo, …, Sa (de_DE) |
%m | Tháng trong năm dưới dạng số thập phân không đệm. | Chủ Nhật, Thứ Hai, …, Thứ Bảy (en_US); Sonntag, Montag, …, Samstag (de_DE) |
%Y | Một năm với một thế kỷ ở định dạng bốn chữ số | 0001, 2021, … , 9999 |
%y | Một năm không có thế kỷ ở định dạng hai chữ số | 01, 21, …, 31 |
%A | Tên đầy đủ của một ngày trong tuần theo tên của ngôn ngữ. | Chủ Nhật, …, Thứ Bảy (en_US); Sonntag, …, Samstag (de_DE) |
%a | Tên viết tắt của một ngày trong tuần làm tên viết tắt của ngôn ngữ. | CN, …, Sat (en_US); Vì vậy, …, Sa (de_DE) |
%B | Tên đầy đủ của một tháng theo tên của miền địa phương | Tháng Giêng, …, Tháng Mười Hai (en_US); tháng một, …, tháng mười hai (de_DE) |
%b | Tên viết tắt của một tháng là tên viết tắt của ngôn ngữ. | Tháng 1, …, Tháng 12 (en_US); Tháng Giêng, …, Dez (de_DE) |
%H | Giờ (đồng hồ 24 giờ) dưới dạng số thập phân không đệm. | 01, 02, … , 23 |
%I | Giờ (đồng hồ 12 giờ) dưới dạng số thập phân không đệm. | 01, 02, …, 12 |
%p | Ngôn ngữ tương đương với AM hoặc PM. | AM, PM (en_US); sáng, chiều (de_DE) |
%M | Phút dưới dạng số thập phân không đệm. | 00, 01, …, 59 |
%S | Thứ hai dưới dạng số thập phân không đệm. | 00, 01, …, 59 |
%f | Micro giây dưới dạng số thập phân, không đệm ở bên trái. | 000000, 000001, …, 999999 |
%z | UTC offset ở dạng ±HHMM[SS[.ffffff]] (chuỗi trống nếu đối tượng là ngây thơ). | (trống), +0000, -0400, +1030, +063415, -030712.345216 |
%Z | Tên múi giờ (chuỗi trống nếu đối tượng là ngây thơ). | (trống), UTC, GMT |
%j | Ngày trong năm dưới dạng số thập phân không đệm. | 001, 002, …, 366 |
%U | Số tuần của năm (Chủ nhật là ngày đầu tiên của tuần) dưới dạng số thập phân không đệm. Tất cả các ngày trong năm mới trước Chủ nhật đầu tiên được coi là trong tuần 0. | 00, 01, …, 53 |
%W | Số tuần của năm (thứ hai là ngày đầu tuần) dưới dạng số thập phân. Tất cả các ngày trong năm mới trước ngày thứ Hai đầu tiên được coi là trong tuần 0. | 00, 01, …, 53 |
%c | Đại diện ngày và giờ thích hợp của địa phương. | Thứ ba ngày 16 tháng 8 21:30:00 1988 (en_US); Ngày 16 tháng 8, 21:30:00, 1988 (de_DE) |
%x | Đại diện ngày thích hợp của địa phương. | 16/08/88 (Không có); 16/08/1988 (en_US); 16.08.1988 (de_DE) |
%X | Đại diện thời gian thích hợp của địa phương. | 21:30:00 (vi_Mỹ); 21:30:00 (de_DE) |
%% | Một '%' nhân vật theo nghĩa đen. | % |
Kết bài
Qua bài viết trên, chuyển chuỗi thành đối tượng DateTime
là một phần quan trọng khi làm việc với thời gian. Thư viện datetime
cung cấp phương thức strptime() cho phép ta dễ dàng biến đổi chuỗi thời gian thành DateTime. Bằng cách xác định định dạng và sử dụng phương thức này, chúng ta có thể tạo ra đối tượng DateTime từ chuỗi dễ dàng và linh hoạt.Chúc bạn thành công.