Как сравнить две даты? - PullRequest
325 голосов
/ 15 ноября 2011

Как бы я сравнил две даты, чтобы увидеть, какая из них позже, с использованием Python?

Например, я хочу проверить, не превышает ли текущая дата последнюю дату в этом списке, даты создания, из дат выходных, чтобы он автоматически отправлял электронное письмо с указанием администратору обновить файл holiday.txt.

Ответы [ 5 ]

426 голосов
/ 16 ноября 2011

Используйте метод 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)
62 голосов
/ 21 июля 2015

Использование 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

37 голосов
/ 16 ноября 2011

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).

см. документы .

0 голосов
/ 23 мая 2019

Для расчета дней с разницей в две даты можно сделать, как показано ниже:

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

Поскольку, если на одну секунду больше установленной даты, то мы должны взимать

0 голосов
/ 13 января 2019

Другие ответы с использованием datetime и сравнения также работают только на время, без даты.

Например, чтобы проверить, является ли сейчас больше или меньше 8:00 утра, мы можем использовать:

import datetime

eight_am = datetime.time( 8,0,0 ) # Time, without a date

А позже сравните с:

datetime.datetime.now().time() > eight_am  

, который вернет True

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...