Сравнение дат в Python - PullRequest
       16

Сравнение дат в Python

62 голосов
/ 25 сентября 2008

Я хотел бы узнать, является ли конкретный объект даты / времени Python старше X часов или минут. Я пытаюсь сделать что-то похожее на:

if (datetime.now() - self.timestamp) > 100
# Where 100 is either seconds or minutes

Это приводит к ошибке типа.

Как правильно сравнивать дату и время в python? Я уже посмотрел на WorkingWithTime , который близок, но не совсем то, что я хочу. Я предполагаю, что просто хочу, чтобы объект datetime был представлен в секундах, чтобы я мог выполнить обычное сравнение int.

Пожалуйста, опубликуйте списки лучших практик по времени и дате.

Ответы [ 6 ]

110 голосов
/ 25 сентября 2008

Используйте класс datetime.timedelta:

>>> from datetime import datetime, timedelta
>>> then = datetime.now() - timedelta(hours = 2)
>>> now = datetime.now()
>>> (now - then) > timedelta(days = 1)
False
>>> (now - then) > timedelta(hours = 1)
True

Ваш пример может быть записан как:

if (datetime.now() - self.timestamp) > timedelta(seconds = 100)

или

if (datetime.now() - self.timestamp) > timedelta(minutes = 100)
5 голосов
/ 11 мая 2012

Альтернатива:

if (datetime.now() - self.timestamp).total_seconds() > 100:

Предполагая, что self.timestamp является экземпляром datetime

5 голосов
/ 25 сентября 2008

Сравните разницу с созданной вами временной шкалой:

if datetime.datetime.now() - timestamp > datetime.timedelta(seconds = 5):
    print 'older'
1 голос
/ 25 сентября 2008

Вы можете использовать комбинацию атрибутов 'days' и 'seconds' возвращаемого объекта, чтобы выяснить ответ, например так:

def seconds_difference(stamp1, stamp2):
    delta = stamp1 - stamp2
    return 24*60*60*delta.days + delta.seconds + delta.microseconds/1000000.

Используйте abs () в ответе, если вам всегда нужно положительное количество секунд.

Чтобы узнать, сколько секунд в прошлом есть отметка времени, вы можете использовать ее следующим образом:

if seconds_difference(datetime.datetime.now(), timestamp) < 100:
     pass
0 голосов
/ 25 сентября 2008

Вроде так:

# self.timestamp should be a datetime object
if (datetime.now() - self.timestamp).seconds > 100:
    print "object is over 100 seconds old"
0 голосов
/ 25 сентября 2008

Вы можете вычесть два datetime объекта, чтобы найти разницу между ними.
Вы можете использовать datetime.fromtimestamp для анализа метки времени POSIX.

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