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 |
|---|---|
| %A | Thứ trong tuần |
| %B | Tháng |
| %M | Phút |
| %Y | Năm |
| %d | Ngà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