Как сравнить две даты?
Как мне сравнить две даты, чтобы увидеть, что позже, используя Python?
Например, я хочу проверить, прошла ли текущая дата прошлой даты в этом списке, который я создаю, даты отпуска, чтобы он автоматически отправил электронное письмо, сообщив администратору об обновлении файла holiday.txt.
Ответы
Ответ 1
Используйте метод datetime
и оператор <
и его род.
>>> from datetime import datetime, timedelta
>>> past = datetime.now() - timedelta(days=1)
>>> present = datetime.now()
>>> past < present
True
>>> datetime(3000, 1, 1) < present
False
>>> present - datetime(2000, 4, 4)
datetime.timedelta(4242, 75703, 762105)
Ответ 2
Используйте time
Скажем, у вас есть начальные даты в виде таких строк:
date1 = "31/12/2015"
date2 = "01/01/2016"
Вы можете сделать следующее:
newdate1 = time.strptime(date1, "%d/%m/%Y")
и newdate2 = time.strptime(date2, "%d/%m/%Y")
, чтобы преобразовать их в формат даты python. Тогда сравнение очевидно:
newdate1 > newdate2
вернет False
newdate1 < newdate2
вернет True
Ответ 3
datetime.date(2011, 1, 1) < datetime.date(2011, 1, 2)
вернет True
.
datetime.date(2011, 1, 1) - datetime.date(2011, 1, 2)
вернет datetime.timedelta(-1)
.
datetime.date(2011, 1, 1) + datetime.date(2011, 1, 2)
вернется datetime.timedelta(1)
.
см. docs.
Ответ 4
Другие ответы, использующие datetime
и время, также работают только для времени, без даты.
Например, чтобы проверить, является ли сейчас больше или меньше 8:00 утра, мы можем использовать:
import datetime
eight_am = datetime.time( 8,0,0 ) # Time, without a date
А позже сравните с:
datetime.datetime.now().time() > eight_am
который вернет True
Ответ 5
Для расчета дней с разницей в две даты, можно сделать, как показано ниже:
import datetime
import math
issuedate = datetime(2019,5,9) #calculate the issue datetime
current_date = datetime.datetime.now() #calculate the current datetime
diff_date = current_date - issuedate #//calculate the date difference with time also
amount = fine #you want change
if diff_date.total_seconds() > 0.0: #its matching your condition
days = math.ceil(diff_date.total_seconds()/86400) #calculate days (in
one day 86400 seconds)
deductable_amount = round(amount,2)*days #calclulated fine for all days
Потому что, если одна дата больше с датой оплаты, то мы должны взимать