1. Mô-đun time trong Python là gì?
1.1 Tổng quan về mô-đun time
Mô-đun time
trong Python là một thư viện tiêu chuẩn dùng để thao tác với thời gian và ngày giờ trong chương trình.
Mô-đun này lấy số giây đã trôi qua kể từ epoch (1 tháng 1 năm 1970, 00:00:00 UTC) dựa trên đồng hồ hệ thống, giúp gắn dấu thời gian vào tệp nhật ký hoặc đo lường hiệu suất chương trình.
Ưu điểm chính của mô-đun time là sự đơn giản. Bạn có thể sử dụng nó một cách dễ dàng mà không cần cấu hình phức tạp, rất phù hợp cho các tác vụ quản lý và đo lường thời gian cơ bản.
1.2 Các chức năng chính
Mô-đun time
cung cấp nhiều hàm liên quan đến thời gian. Dưới đây là một số hàm tiêu biểu:
time.time()
: Trả về số giây đã trôi qua kể từ epoch dưới dạng số thực.time.sleep(secs)
: Tạm dừng thực thi chương trình trong một khoảng thời gian xác định (tính bằng giây). Điều này hữu ích khi bạn muốn dừng xử lý tạm thời.time.ctime()
: Chuyển đổi dấu thời gian thành định dạng dễ đọc đối với con người.
Bằng cách sử dụng những hàm này, bạn có thể thực hiện từ các thao tác thời gian đơn giản đến đo lường phức tạp một cách linh hoạt.

2. Cách lấy thời gian hiện tại
2.1 Sử dụng time.time()
để lấy thời gian hiện tại
Hàm time.time()
trả về số giây đã trôi qua kể từ epoch. Đây là cách đơn giản nhất để lấy thời gian hiện tại. Dưới đây là một ví dụ:
import time
current_time = time.time()
print(current_time)
Đoạn mã trên sẽ hiển thị thời gian epoch hiện tại dưới dạng số thực. Mặc dù thời gian epoch hữu ích cho các phép tính thời gian trong chương trình, nhưng nó khó hiểu đối với con người. Vì vậy, ta thường sử dụng strftime()
để định dạng thời gian theo cách dễ đọc hơn, như sẽ trình bày trong phần tiếp theo.
2.2 Chuyển đổi sang định dạng dễ đọc bằng strftime()
Hàm time.strftime()
giúp chuyển đổi thời gian epoch thành định dạng có năm, tháng, ngày, giờ, phút, giây, rất hữu ích khi hiển thị trên giao diện hoặc ghi nhật ký. Dưới đây là một ví dụ:
import time
formatted_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
print(formatted_time)
Trong ví dụ này, time.localtime()
được sử dụng để chuyển đổi dấu thời gian hiện tại thành múi giờ địa phương, sau đó strftime()
định dạng thành “YYYY-MM-DD HH:MM:SS”.
Các ký hiệu định dạng quan trọng:
%Y
: Năm (4 chữ số)%m
: Tháng%d
: Ngày%H
: Giờ (24 giờ)%M
: Phút%S
: Giây
Nhờ đó, bạn có thể dễ dàng chuyển đổi dữ liệu thời gian thành định dạng trực quan và dễ hiểu hơn.
3. Cách đo thời gian thực thi
3.1 Đo thời gian thực thi bằng time.time()
Cách đơn giản nhất để đo thời gian thực thi là sử dụng time.time()
. Phương pháp này lấy thời gian bắt đầu và kết thúc, sau đó tính khoảng chênh lệch để xác định thời gian chạy.
import time
start_time = time.time()
# Ví dụ: vòng lặp chạy
for i in range(1000000):
pass
end_time = time.time()
print(f"Thời gian thực thi: {end_time - start_time} giây")
Ví dụ trên đo thời gian thực thi của một vòng lặp. Vì time.time()
chỉ đo ở mức giây và mili giây, độ chính xác không cao nhưng đủ dùng cho các phép đo thời gian cơ bản.
3.2 Đo thời gian chính xác cao bằng perf_counter()
Nếu cần đo thời gian thực thi chính xác hơn, ta có thể sử dụng perf_counter()
. Hàm này sử dụng bộ đếm hiệu suất của hệ thống, giúp đo chính xác đến nano giây.
import time
start_time = time.perf_counter()
# Đo hiệu suất với độ chính xác cao
for i in range(1000000):
pass
end_time = time.perf_counter()
print(f"Thời gian thực thi chính xác cao: {end_time - start_time} giây")
Do perf_counter()
có độ chính xác cao hơn time.time()
, nó phù hợp cho các ứng dụng yêu cầu đo thời gian chặt chẽ hoặc tối ưu hóa hiệu suất.
3.3 Benchmark hiệu suất bằng mô-đun timeit
Nếu bạn muốn đo thời gian chạy của một đoạn mã lặp lại nhiều lần và lấy trung bình, mô-đun timeit
sẽ rất hữu ích.
import timeit
print(timeit.timeit('"-".join(str(n) for n in range(100))', number=10000))
Đoạn mã trên thực hiện phép nối danh sách 10.000 lần và tính thời gian trung bình. Mô-đun timeit
giúp giảm ảnh hưởng của nhiễu và cho kết quả đo chính xác hơn.

4. Thao tác với ngày tháng: So sánh với mô-đun datetime
4.1 Lấy thời gian hiện tại bằng datetime.now()
Bên cạnh mô-đun time
, Python còn có mô-đun datetime
hỗ trợ thao tác với ngày tháng và thời gian phức tạp hơn.
from datetime import datetime
now = datetime.now()
print(now)
Đoạn mã trên lấy thời gian hiện tại và hiển thị dưới dạng đối tượng datetime
. Với datetime
, ta có thể dễ dàng thao tác với múi giờ và thực hiện các phép tính ngày giờ.
4.2 Khi nào nên dùng time
và khi nào nên dùng datetime
?
Mô-đun time
có ưu điểm đơn giản, phù hợp cho đo thời gian và thực thi nhanh. Tuy nhiên, nếu bạn cần thao tác với ngày tháng cụ thể hoặc quản lý múi giờ, datetime
sẽ phù hợp hơn.
Ví dụ:
- Nếu cần đo thời gian thực thi → Dùng
time.time()
hoặcperf_counter()
. - Nếu cần xử lý ngày tháng như lịch sự kiện → Dùng
datetime
.
Hiểu rõ sự khác biệt giữa hai mô-đun này sẽ giúp bạn chọn công cụ phù hợp nhất cho từng trường hợp.
5. Ứng dụng thực tế: Cách sử dụng mô-đun time
5.1 Thêm dấu thời gian vào nhật ký (log)
Trong lập trình, việc theo dõi các sự kiện bằng cách ghi lại nhật ký (log) rất quan trọng. Ta có thể sử dụng time.ctime()
để dễ dàng thêm dấu thời gian vào log.
import time
log_entry = f"{time.ctime()} - Thông báo lỗi"
print(log_entry)
Ví dụ trên sử dụng time.ctime()
để tạo dấu thời gian theo định dạng dễ đọc, giúp ghi nhận sự kiện một cách rõ ràng trong nhật ký.
5.2 Tối ưu hóa hiệu suất chương trình
Việc đo thời gian thực thi có thể giúp tìm ra những đoạn mã tốn thời gian nhất, từ đó tối ưu hiệu suất chương trình. Mô-đun time
và timeit
rất hữu ích trong việc xác định điểm nghẽn hiệu suất.
import timeit
print(timeit.timeit('sum(range(1000))', number=10000))
Đoạn mã trên đo thời gian thực thi của phép tính tổng từ 0 đến 999 trong 10.000 lần lặp lại. Kết quả có thể dùng để so sánh với các phương pháp tối ưu hơn.
6. Tổng kết
Mô-đun time
trong Python cung cấp các công cụ mạnh mẽ nhưng đơn giản để thao tác với thời gian, từ các tác vụ cơ bản như lấy thời gian hiện tại đến đo hiệu suất chương trình.
Điểm nổi bật:
- Đo thời gian thực thi bằng
time.time()
hoặcperf_counter()
. - Ghi nhật ký với dấu thời gian bằng
time.ctime()
. - Định dạng thời gian dễ đọc bằng
strftime()
. - Benchmark hiệu suất với
timeit
.
Trong các ứng dụng đòi hỏi thao tác phức tạp với ngày tháng, mô-đun datetime
là một lựa chọn phù hợp. Hiểu rõ sự khác biệt giữa time
và datetime
sẽ giúp bạn lập trình hiệu quả hơn.