Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Làm việc với Ngày và Giờ (Dates and Times) trong Python

Thao tác ngày và giờ là phần không thể thiếu của bất kỳ ngôn ngữ lập trình nào. Python có thư viện chuẩn chứa mô-đun datetime với hầu hết các tính năng và hàm để thực hiện các tính toán liên quan đến ngày giờ. Trong các ví dụ dưới đây, chúng ta sẽ thấy cách triển khai các khía cạnh khác nhau của ngày giờ.

Xử lý ngày hiện tại

Mô-đun datetime có lớp tên là datetime. Chúng ta có thể nhập lớp này và sử dụng các hàm của nó để tạo đối tượng datetime. Sau đó áp dụng các kỹ thuật định dạng để hiển thị giá trị ngày và giờ. Trước tiên, tạo đối tượng datetime khởi tạo bằng hàm now(). Đối tượng này giữ tất cả các phần của ngày và giờ hiện tại, sau đó chúng ta thao tác các phần khác nhau của nó.

Ví dụ

from datetime import datetime
doi_tuong_thoi_gian = datetime.now()
# In ngày giờ hiện tại
print(doi_tuong_thoi_gian)
# Tìm lớp của đối tượng
print('Lớp đối tượng:', type(doi_tuong_thoi_gian))

Kết quả

Chạy mã trên cho kết quả sau:

2020-01-22 09:33:02.693863
Lớp đối tượng: 

Datetime và Chuỗi (Strings)

Chúng ta có thể chuyển đổi chuỗi sang datetime và ngược lại sử dụng phương thức strptime và strftime. Chuyển đổi này là cần thiết khi xử lý các nguồn dữ liệu khác nhau nơi dữ liệu có thể không được trình bày đúng định dạng như Python cần để gọi là datetime. Trong ví dụ dưới đây, chúng ta lấy một chuỗi và chuyển thành datetime. Và cũng làm ngược lại.

Ví dụ

from datetime import datetime
chuoi_thoi_gian = '2020-1-30 2-52-59'
# Tạo đối tượng ngày từ chuỗi
gia_tri_ngay = datetime.strptime(chuoi_thoi_gian, "%Y-%m-%d %H-%M-%S")
print(gia_tri_ngay)
print('Lớp:', type(gia_tri_ngay))
print("\n")
# Tạo chuỗi từ đối tượng Date
chuoi_tu_ngay = datetime.strftime(gia_tri_ngay, "%Y-%m-%d %H-%M-%S")
print(chuoi_tu_ngay)
print('Lớp:', type(chuoi_tu_ngay))

Kết quả

Chạy mã trên cho kết quả sau:

2020-01-30 02:52:59
Lớp: 
2020-01-30 02-52-59
Lớp: 

Trích xuất các phần của giá trị Date Time

Chúng ta có thể trích xuất các phần khác nhau của ngày sử dụng các chỉ thị (directives) và phương thức strftime. Dưới đây là danh sách một số ví dụ về các chỉ thị và mục đích của chúng. Để có danh sách đầy đủ, tham khảo tài liệu Python.

Chỉ thịCách dùng
%AThứ trong tuần
%BTháng
%MPhút
%YNăm
%dNgày trong tháng

Ví dụ dưới đây cho thấy cách sử dụng các chỉ thị.

Ví dụ

from datetime import datetime
chuoi_thoi_gian = '2020-1-30 2-52-59'
# Tạo đối tượng ngày từ chuỗi
gia_tri_ngay = datetime.strptime(chuoi_thoi_gian, "%Y-%m-%d %H-%M-%S")
# Trả về năm, tên thứ, tháng, ngày trong tháng:
print(gia_tri_ngay.year)
print(gia_tri_ngay.strftime("%d"))
print(gia_tri_ngay.strftime("%B"))
print(gia_tri_ngay.strftime("%A"), "\n")

Kết quả

Chạy mã trên cho kết quả sau:

2020
30
January
Thursday

Toán học Date Time

Tiếp theo, chúng ta xem ví dụ về tính toán liên quan đến ngày và giờ. Chúng ta có thể cộng và trừ ngày, giờ từ một ngày cho trước. Cũng có thể lấy hai ngày làm đầu vào và áp dụng các phép toán trên chúng.

Sử dụng TimeDelta

Ví dụ

from datetime import datetime, timedelta
# Tìm thời gian hiện tại
thoi_gian_hom_nay = datetime.now()
print("Ngày hôm nay:", str(thoi_gian_hom_nay))
# Cộng 5 ngày
ngay_moi = thoi_gian_hom_nay + timedelta(days=5)
print('Sau 5 ngày:', ngay_moi)
# Trừ 2 tuần
hai_tuan_truoc = thoi_gian_hom_nay - timedelta(weeks=2)
print('Hai tuần trước:', hai_tuan_truoc)
print('Kiểu hai_tuan_truoc:', type(hai_tuan_truoc))

Kết quả

Chạy mã trên cho kết quả sau:

Ngày hôm nay: 2020-01-29 12:38:03.290795
Sau 5 ngày: 2020-02-03 12:38:03.290795
Hai tuần trước: 2020-01-15 12:38:03.290795
Kiểu hai_tuan_truoc: 

Sử dụng Toán tử

Chúng ta có thể áp dụng một số toán tử giữa hai ngày. Hiệu giữa hai ngày có thể tìm bằng toán tử trừ và so sánh ngày bằng toán tử logic.

Ví dụ

from datetime import datetime
# Các ngày cho trước
ngay1 = datetime(2018, 5, 12, 8, 11, 53)
ngay2 = datetime(2017, 6, 16, 12, 43, 27)
# Hiệu giữa hai ngày
hieu_ngay = ngay1 - ngay2
print("Hiệu:", hieu_ngay)
# So sánh hai ngày
print(ngay1 < ngay2)

Kết quả

Chạy mã trên cho kết quả sau:

Hiệu: 329 days, 19:28:26
False