Cộng trừ ngày tháng và so sánh thời gian trong python | Laptrinhcanban.com

Cộng trừ ngày tháng và so sánh thời gian trong python

Hướng dẫn cách cộng trừ ngày tháng và so sánh thời gian trong python. Bạn sẽ học được cách tính toán với ngày giờ cũng như cách so sánh thời gian trong python sau bài học này.

Cộng ngày tháng trong python

Đối với các giá trị thời gian cụ thể là các instance được tạo ra bởi class datetime hoặc date, chúng ta có thể tiến hành cộng chúng với một instance được tạo bởi class timedelta(class biểu thị chênh lệch thời gian) và tạo ra một instace thời gian mới, giống như dưới đây:

dt_new = dt + td

Trong đó:

  • dt là một giá trị thời gian cụ thể - là một instance được tạo bởi class date hoặc class datetime.
  • td là một số ngày cụ thể - là một instance tạo bởi class timedelta. Tùy thuộc vào giá trị của td là âm hay dương mà chúng ta có thể cộng lùi về quá khức hoặc cộng tiến lên về phía tương lai.
  • dt_new là một giá trị thời gian mới là kết quả của phép tính.

Bạn có thể tìm hiểu chi tiết về các class này tại bài viết Datetime trong python là gì

Cụ thể, chúng ta cộng trừ ngày tháng trong python giống như ví dụ sau đây:

import datetime

dt2 = datetime.datetime(2020, 7, 21, 6, 12, 30, 551)
print(dt1)
>> 2020-07-21 06:12:30.000551

dt2 = dt1 + datetime.timedelta(days=1)
print(dt2)
>> 2020-07-22 06:12:30.000551

dt3 = dt1g + datetime.timedelta(days=-1)
print(dt3)
>> 2020-07-20 06:12:30.000551

Với việc chỉ định giá trị của đối số days của phương thức timedelta là âm hay dương mà chúng ta có thể cộng lùi về quá khứ 1 ngày hoặc cộng tiến về tương lai một ngày, như ví dụ ở trên.

Nếu dữ liệu của bạn không phải là một datetime mà chỉ là các chuỗi ký tự chứa thông tin thời gian, hãy chuyển chúng về dạng datetime bằng cách dùng strptime trong python và sau đó tiến hành cộng ngày tháng trong python, giống như ví dụ sau đây:

import datetime
str1= "21/02/13"
d1 = datetime.datetime.strptime(str1, "%y/%m/%d")

print(d1)
#>> 2021-02-13 00:00:00
print(d1 + datetime.timedelta(days=31))
#>> 2021-03-16 00:00:00
print(d1 + datetime.timedelta(days=-2))
#>> 2021-02-11 00:00:00

Trừ ngày tháng trong python

Để trừ ngày tháng trong python và tính chênh lệch ngày tháng giữa hai giá trị thời gian trong python, chúng ta sử dụng phép trừ như dưới đây:

td = dt1 - dt2

Trong đó:

  • dt1 và dt2 là các giá trị thời gian cụ thể - các instance được tạo bởi class date hoặc class datetime.
  • td là một giá trị thời gian biểu thị chênh lệch ngày tháng giữa hai giá trị thời gian dt1 và dt2. Giá trị này được coi là một instance của class timedelta và có thể gọi ra các thuộc tính kèm theo của instance.

Cụ thể, chúng ta trừ ngày tháng trong python giống như ví dụ sau đây:

import datetime

dt1 = datetime.datetime(2020, 7, 21, 6, 12, 30, 551)
print(dt1)
#>> 2020-07-21 06:12:30.000551

dt2 = datetime.datetime(2020, 5, 12, 6, 45, 12, 7721)
print(dt2)
#>> 2020-05-12 06:45:12.007721

td= dt1 -dt2
print(td)
#>> 69 days, 23:27:17.992830

print(td.days)
#>> 69

print(td.seconds)
#>> 84437

Kết quả của phép toán trừ ngày tháng trong python là một instance của class timedelta, do đó chúng ta có thể gọi ra các thuộc tính của instance này như ví dụ ở trên.

Nếu dữ liệu của bạn không phải là một datetime mà chỉ là các chuỗi ký tự chứa thông tin thời gian, hãy chuyển chúng về dạng datetime bằng cách dùng strptime trong python và sau đó tiến hành trừ ngày tháng trong python, giống như ví dụ sau đây:

import datetime

str1= "91/04/15"
str2= "19/08/10"
dt1 = datetime.datetime.strptime(str1, "%y/%m/%d")
dt2 = datetime.datetime.strptime(str2, "%y/%m/%d")

print(dt2-dt1)
#>> 10344 days, 0:00:00

print((dt2-dt1).days/365)
#>> 28.339726027397262

So sánh thời gian trong python

Giả sử bạn có hai chuỗi ký tự biểu diễn thời gian trong python như là “21/02/13” và “21/06/13” và bạn muốn so sánh chúng? Để làm được điều này, trước hết bạn cần chuyển chúng về dạng datetime trong python bằng cách sử dụng [phương thức strptime trong python]strptime trong python.
Sau đó bạn có thể tiến hành trừ thời gian trong python và xem xét giá trị thu được là âm hay dương, hoặc đơn giản bạn có thể so sánh trực tiếp chúng với nhau.

Sau đây, Kiyoshi sẽ đưa ra hai solution để giải quyết bài toán này như sau:

Sử dụng trừ thời gian trong python

import datetime
str1= "21/02/13"
str2= "21/06/13"
dt1 = datetime.datetime.strptime(str1, "%y/%m/%d")
dt2 = datetime.datetime.strptime(str2, "%y/%m/%d")

td_day= (dt1-dt2).days
if td_day > 0:
print(dt1," lon hon ",dt2)
elif td_day < 0:
print(dt1," nho hon ",dt2)
else:
print(dt1, " bang ",dt2)

Lưu ý là kết quả phép trừ thời gian trong python là một instance nên chúng ta không xác định được dấu của nó. Thay vào đó, chúng ta cần lấy ra thuộc tính strptime.days ra để so sánh.

So sánh trực tiếp thời gian trong python

import datetime
str1= "21/02/13"
str2= "21/06/13"
d1 = datetime.datetime.strptime(str1, "%y/%m/%d")
d2 = datetime.datetime.strptime(str2, "%y/%m/%d")

if d1 > d2 :
print(d1," lon hon ",d2)
elif d1 < d2:
print(d1," nho hon ",d2)
else:
print(d1, " bang ",d2)

Cả hai solution trên đều đưa ra cùng kết quả:

2021-02-13 00:00:00  nho hon  2021-06-13 00:00:00

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về cách cộng trừ ngày tháng và so sánh thời gian 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é.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về python trong các bài học tiếp theo.

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.